3. Abstract Factory 抽象工廠(創建型模式)

意圖(Intent)
提供一個接口,讓該接口負責創建一系列“相關或者
相互依賴的對象”,無需指定它們具體的類。
——《設計模式》GoF

 

new的問題
常規的對象創建方法:
// 創建一個Road 對象
Road road=new Road();
new的問題:
– 實現依賴,不能應對“具體實例化類型”的變化。
解決思路:
– 封裝變化點—— 哪裏變化,封裝哪裏
– 潛臺詞:如果沒有變化,當然不需要額外的封裝!

 

工廠模式的緣起
• 變化點在“對象創建”,因此就封裝“對象創建”
• 面向接口編程——依賴接口,而非依賴實現
• 最簡單的解決方法:
class RoadFactory{
public static Road CreateRoad()
{
return new Road();
}
}
// 創建一個Road 對象
Road road=
roadFactory.CreateRoad();

 

 動機(Motivation)
在軟件系統中,經常面臨着“一系列相互依賴的對象”的創建
工作;同時,由於需求的變化,往往存在更多系列對象的
創建工作。
如何應對這種變化?如何繞過常規的對象創建方法(new),
提供一種“封裝機制”來避免客戶程序和這種“多系列具體對
象創建工作”的緊耦合?

 

 

Abstract Factory模式的幾個要點
• 如果沒有應對“多系列對象構建”的需求變化,則沒有必要
使用Abstract Factory模式,這時候使用簡單的靜態工廠
完全可以。
•“ 系列對象”指的是這些對象之間有相互依賴、或作用的關
系,例如遊戲開發場景中的“道路”與“房屋”的依賴,“道路”
與“地道”的依賴。
• Abstract Factory模式主要在於應對“新系列”的需求變動。
其缺點在於難以應對“新對象”的需求變動。
• Abstract Factory模式經常和Factory Method模式共同組合
來應對“對象創建”的需求變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章