天天看點

抽象工廠 Abstract Factory一、是什麼?二、執行個體三、問答

父博文位址:設計模式 - Design Patterns

一、是什麼?

作用:

  1. 當我需要建立一個産品家族(很多産品)時,我可以使用抽象工廠。
  2. 客戶通過抽象接口來建立産品家族,而不需要知道實際産出的具體産品類型。
  3. 實作了解耦客戶和具體産品。

行為

  • 定義一個抽象工廠接口,每個抽象工廠的子類都能建立所有産品家族的産品。
抽象工廠 Abstract Factory一、是什麼?二、執行個體三、問答

二、執行個體

  1. 上面類圖的實作

    其它代碼就不給了按照類圖就能寫出來,這裡隻給出客戶的代碼:

    public class Client {
        public static void main(String[] args) {
            // 客戶選擇使用某一個具體的工廠
            AbstractFactory abstractFactory = new ConcreteFactory1();
            // 然後就可以任意建立産品族中的産品,而不需要知道具體的産品(隻知道抽象産品AbstractProductA/AbstractProductB)
            AbstractProductA productA = abstractFactory.createProductA();
            System.out.println(productA.getClass().getSimpleName());
            AbstractProductB productB = abstractFactory.createProductB();
        }
    }
               

三、問答

  1. 抽象工廠的每個方法,看起來都像是工廠方法?

    沒錯,就是這樣。

  2. 抽象工廠和工廠方法建立對象方式的不同?

    工廠方法在類(

    Class

    )層面,通過繼承以及覆寫來建立對象。新增一個産品時隻需要建立一個

    Class

    抽象工廠在組合(

    Composition

    )層面。新增一個産品必須改變接口以及重新實作子工廠的方法。

    新增時有以上差别,隻是因為工廠方法隻有一個抽象産品,而抽象工廠有多個抽象産品。

  • 1.1 工廠方法 Factory Method
  • 1.1.1 簡單工廠 SimpleFactory

繼續閱讀