抽象工廠模式

Abstract Factory Pattern

提供一個接口,用於創建相關或依賴對象的家族,而不需要明確指定具體類。即產品增加產品族的概念。

Example: 運輸系統世紀帝國


抽象工廠模式會將類別分為兩類:
分別是工廠類別 (Creator)產品類別 (Product)
兩者皆有對應的抽象介面,
抽象工廠類別 (AbstractFactory)抽象產品類別 (AbstractProduct)

不同類型的產品結盟成產品族


優點:
將創建物件的邏輯與物件本身的邏輯分離。
一個工廠只會對應一個產品族類別,遵守開放封閉原則

缺點:
會使程式碼變得複雜。
不容易替產品族新增新的產品。(須修改抽象工廠介面)


與其他模式的比較:
[簡單工廠模式]:
簡單工廠模式僅擁有一個工廠
透過 switch 子句,創建同種類型不同產品

無法遵守開放封閉原則

[工廠方法模式]:
工廠方法模式擁有多個工廠
各個工廠創建同種類型不同產品


抽象工廠模式則是擁有多個工廠
各個工廠創建多種類型的產品。
不同類型的產品,有著一條隱密的線,形成產品族的關係。


實作技巧:

  • 將 factory 作成 singleton
  • 若會有好幾個產品族物件並存,不妨採用 Prototype 來製作工廠類別 (Factory)

ʕ •ᴥ•ʔ:把你學會的 S.O.L.I.D 同時發揮出來。

Share