java 抽象工廠模式簡單實例


抽象工廠模式:提供一個創建一系列的相關的或者依賴的對象的接口,無需指定它們的具體實現類,具體的時間分別在子類工廠中產生。

類似於工廠模式:隔離了具體類的生產實現,使得替換具體的工廠實現類很容易。包含有以下模塊:

1.抽象產品接口:定義產品的接口,公共的暴露方法。便於實際的產品類實現。

2.具體的產品類:包含實際產品的類的邏輯處理:

3.抽象工廠接口:定義產生系列對象的接口

4.具體的工廠實現:實現抽象的接口工廠,返回具體的產品類的實現。

下面是具體的代碼示例:

1.抽象的產品接口,定義了Car 和 IBreakFast

package factory.simple;

/**
 * 抽象產品角色 交通工具接口
 * 
 * @author lilin
 * 
 */
public interface Car {

    /**
     * 上班函數
     */
    void gotowork();

}

 

package factory.abstractfactory;

/**
 * @author lilin
 * 
 */
public interface IBreakFast {
    /**
     * 吃早餐
     */
    void eat();
}

2.定義具體的產品類的實現:

package factory.simple;

/**
 * 具體產品角色,自行車
 * 
 * @author lilin
 * 
 */
public class Bike implements Car {
    @Override
    public void gotowork() {
        System.out.println("騎自行車去上班!");
    }

}

 

package factory.simple;

/**
 * @author lilin
 * 
 */
public class Bus implements Car {

    @Override
    public void gotowork() {
        System.out.println("坐公交車去上班!");
    }

}

 

/**
 * 
 */
package factory.abstractfactory;

/**
 * @author lilin
 * 
 */
public class Milk implements IBreakFast {

    @Override
    public void eat() {
        System.out.println("喝牛奶!");
    }

}

 

/**
 * 
 */
package factory.abstractfactory;

/**
 * @author lilin
 * 
 */
public class Orange implements IBreakFast {

    @Override
    public void eat() {
        System.out.println("吃橘子!");
    }

}

3.定義好抽象的工廠接口,一系列的獲取實例的接口方法:

/**
 * 
 */
package factory.abstractfactory;

import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public interface IAbstractFactory {

    /**
     * 
     * @return
     */
    Car getCar();

    /**
     * 
     */
    IBreakFast getBreakFast();

}

4.定義具體的工廠生產類,具體的產品實例返回。

/**
 * 
 */
package factory.abstractfactory;

import factory.simple.Bike;
import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public class LowPersonFactory implements IAbstractFactory {

    @Override
    public Car getCar() {
        return new Bike();
    }

    @Override
    public IBreakFast getBreakFast() {
        return new Orange();
    }

}

 

/**
 * 
 */
package factory.abstractfactory;

import factory.simple.Bus;
import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public class HighPersonFactory implements IAbstractFactory {

    @Override
    public Car getCar() {
        return new Bus();
    }

    @Override
    public IBreakFast getBreakFast() {
        return new Milk();
    }
}

 

最后,通過testNG簡單測試下,抽象工廠模式的實現:代碼如下:

/**
 * 
 */
package factory.abstractfactory;

import org.testng.annotations.Test;

import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public class AbstractFactoryTest {

    @Test
    public void test() {
        IAbstractFactory factory = new LowPersonFactory();
        Car car = factory.getCar();
        IBreakFast breakFast = factory.getBreakFast();
        System.out.println("吃的早飯是:");
        breakFast.eat();
        System.out.println("上班交通工具是:");
        car.gotowork();

        IAbstractFactory factory2 = new HighPersonFactory();
        car = factory2.getCar();
        breakFast = factory2.getBreakFast();
        System.out.println("吃的早飯是:");
        breakFast.eat();
        System.out.println("上班交通工具是:");
        car.gotowork();
    }

}

這樣使用過程城中,只要注入抽象的工廠接口,具體的產品的產生,會在實際的子類工廠類中產生,也可以隨意的添加和修改實際子類工廠類,而不需要改變既有的代碼設計。

抽象工廠方法:一般常常使用於一套程序,需要多套實現的場景之下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM