重學設計模式 - Abstract Factory模式

1、意圖

提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。

2、適用性

以下情況可用Abstract Factory 模式:

  • 一個系統要獨立於它的產品的創建、組合和表示時。
  • 一個系統要有多個產品系列中的一個來配置時。
  • 當你要強調一系列相關產品對象的設計以便進行聯合使用時。
  • 當你提供一個產品類庫,而只想顯示它們的接口而不是實現時。

3、解決方案

協調對象組的創建。提供一種方式,將如何執行對象實例化的規則從使用這些對象的客戶對象提取出來。

4、通用結構

 

5、參與者

  • AbstractFactory:聲明一個創建抽象產品對象的操作接口。
  • ConcreteFactory:實現創建具體產品對象的操作。
  • AbstractProduct:爲一類產品對象聲明一個接口。
  • ConcreteProduct:定義一個將被相應的具體工廠創建的產品對象;實現AbstractProduct接口。
  • Client:僅使用由AbstractFactory和AbstractProduct類聲明的接口。

6、協作

  •  通常在運行時刻創建一個ConcreteFactory類的實例。這一具體的工廠對象實例創建具有特定實現的產品對象。爲創建不同的產品對象,用戶應使用不同的具體工廠。
  • AbstractFactory將產品對象的創建延遲到它的ConcreteFactory子類。

7、效果

  • 它分離了具體的類
  • 它使得易於交換產品序列
  • 它有利於產品的一致性
  • 難以自持新種類的產品

8、實現

  •  將ConcreteFactory作爲單件:一個應用中一般每個產品系列只需一個ConcreteFactory實例。因此,可將ConcreteFactory實現爲Singleton。
  • 創建產品:AbstractFactory僅聲明一個創建產品的接口,真正創建產品是由ConcreteFactory實現的。
    1)爲每個產品定義一個工廠方法。一個具體工廠將爲每個產品重定義該工廠方法以指定產品。優點:實現簡單;缺點:要求每個產品系列都要定義一個新的具體工廠子類,儘管這些產品系列的差別很小。
    2)如果有多個可能的產品系列,具體工廠也可以使用Protocol模式來實現。具體工廠使用產品系列中每一個產品的原型實例來初始化,且它通過複製它的原型來創建新的產品。在基於原型的方法中,使得不是每一個新的產品系列都需要一個新的具體工廠類
  • 定義可擴展的工廠:給創建對象的操作接口添加一個參數,該參數指定了將被創建的對象的種類8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章