天天看點

設計模式入門:抽象工廠模式

UML類圖

設計模式入門:抽象工廠模式

抽象工廠模式

代碼示例

  • 定義蘋果類接口,包含一個描述方法
/**
 * 蘋果抽象類
 */
public interface IApple {

    /**
     * 具體描述
     */
    void describe();

}
           
  • 紅蘋果,實作了接口蘋果和定義的方法
/**
 * 紅蘋果
 */
public class RedApple implements IApple {

    @Override
    public void describe() {
        System.out.println("This is red apple");
    }

}
           
  • 青蘋果,實作了接口蘋果和定義的方法
/**
 * 青蘋果
 */
public class GreenApple implements IApple {

    @Override
    public void describe() {
        System.out.println("This is green apple");
    }

}
           
  • 定義梨子類接口,包含一個描述方法
/**
 * 梨子抽象類
 */
public interface IPear {

    /**
     * 具體描述
     */
    void describe();

}
           
  • 青梨,實作了接口梨子和定義的方法
/**
 * 青梨
 */
public class GreenPear implements IPear {

    @Override
    public void describe() {
        System.out.println("This is green pear");
    }

}
           
  • 黃梨,實作了接口梨子和定義的方法
/**
 * 黃梨
 */
public class YellowPear implements IPear {

    @Override
    public void describe() {
        System.out.println("This is yellow pear");
    }

}
           
  • 水果工廠抽象類
/**
 * 水果工廠抽象類
 */
public interface IFruitFactory {

    /**
     * 建立蘋果執行個體
     *
     * @return
     */
    IApple createApple();

    /**
     * 建立梨子執行個體
     *
     * @return
     */
    IPear createPear();

}
           
  • 工廠A: 負責生産青蘋果和青梨
/**
 * 工廠A: 負責生産青蘋果和青梨
 */
public class FactoryA implements IFruitFactory {

    @Override
    public IApple createApple() {
        return new GreenApple();
    }

    @Override
    public IPear createPear() {
        return new GreenPear();
    }

}
           
  • 工廠B: 負責生産紅蘋果和黃梨
/**
 * 工廠B: 負責生産紅蘋果和黃梨
 */
public class FactoryB implements IFruitFactory {

    @Override
    public IApple createApple() {
        return new RedApple();
    }

    @Override
    public IPear createPear() {
        return new YellowPear();
    }

}
           
  • 用戶端測試
public class Main {

    public static void main(String[] args) {
        IFruitFactory factoryA = new FactoryA();
        IApple apple = factoryA.createApple();
        apple.describe();
        IPear pear = factoryA.createPear();
        pear.describe();

        System.out.println("-------------------");

        IFruitFactory factoryB = new FactoryB();
        apple = factoryB.createApple();
        apple.describe();
        pear = factoryB.createPear();
        pear.describe();
    }

}
           

總結思考

  抽象工廠用于提供建立一系列相關或互相依賴的接口,而無需指定它們具體的類。對比工廠方法,抽象工廠面對的是整個産品族,而工廠方法面對的是獨立的産品。

相關連結

示例代碼 設計模式:簡單工廠、工廠方法、抽象工廠之小結與差別

繼續閱讀