父博文位址:設計模式 - Design Patterns
一、是什麼?
作用:
- 當我需要建立一個産品家族(很多産品)時,我可以使用抽象工廠。
- 客戶通過抽象接口來建立産品家族,而不需要知道實際産出的具體産品類型。
- 實作了解耦客戶和具體産品。
行為
- 定義一個抽象工廠接口,每個抽象工廠的子類都能建立所有産品家族的産品。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9MGVOVzYU9UeBRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TNxEDMzgDNzEDMyUDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
二、執行個體
-
上面類圖的實作
其它代碼就不給了按照類圖就能寫出來,這裡隻給出客戶的代碼:
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(); } }
三、問答
-
抽象工廠的每個方法,看起來都像是工廠方法?
沒錯,就是這樣。
-
抽象工廠和工廠方法建立對象方式的不同?
工廠方法在類(
)層面,通過繼承以及覆寫來建立對象。新增一個産品時隻需要建立一個Class
Class
。
抽象工廠在組合(
Composition
)層面。新增一個産品必須改變接口以及重新實作子工廠的方法。
新增時有以上差别,隻是因為工廠方法隻有一個抽象産品,而抽象工廠有多個抽象産品。
- 1.1 工廠方法 Factory Method
- 1.1.1 簡單工廠 SimpleFactory