為什麼要有工廠方法?我們知道。每一種設計模式的出現,都是為了解決一些問題的,那麼工廠方法想要解決什麼問題呢?先看個示例。
monster m = new monster();
很簡單哈,就是例項化了乙個類,那麼思考乙個問題,如果物件的建立過程過於繁瑣或龐大,或該類有可能進行同型別擴充套件, 那麼在這樣的簡單的去實現就不太好了,這時候我們建議將類的建立單獨放到乙個類裡進行,這個類就叫做工廠。
意圖:定義用於建立物件的介面, 但讓實現該介面的類決定要例項化哪個類。畫個類圖用來表示下。
奧特曼這個應該很簡單,嗯,來看個複雜的。
圖中有乙個ifactory
的介面,裡面有兩個實現類,ultranmanfactory
和wbdfactory
,同時還有乙個介面叫imonster
,它也有兩個實現類,whiteboondemon
和ultraman
,(奧特曼和白骨精)同時這兩個類也都依賴於ultranmanfactory
和wbdfactory
。有點麻煩了,那咱們把這個類圖簡化一下。如圖。
這裡簡單說一下factory,factory是對抽象介面的實現也就是建立物件。
說了這麼多,接下來看看**。
先看ifactory.cs
namespace factorymethod
}
imonster.cs
namespace factorymethod
}
ultraman.cs
using system;
namespace factorymethod}}
whiteboondemon.cs
using system;
namespace factorymethod}}
ultramanfactory.cs
namespace factorymethod}}
wbdfactory.cs
namespace factorymethod}}
最後看下main函式如何呼叫。program.cs
using system;
namespace factorymethod}}
a a = new a();
多考慮,是否用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統帶來更大的可擴充套件性和盡量少的修改量。
愛遊戲愛程式設計.jpg
簡單工廠方法,工廠方法,抽象工廠方法
以大話設計模式計算器為例 簡單工廠方法是由具體執行功能類,工廠類,客戶端構成,工廠類有case語句,負責建立不同的類,客戶端呼叫工廠類裡面的工廠方法,工廠類的工廠方法根據客戶端傳進去的引數new相應的類的物件返回給客戶端,客戶端得到返回的物件用該物件初始化該物件的成員變數最後呼叫該物件的方法執行計算...
2 工廠方法模式
1.說明 請參見 簡單工廠模式 此處略。2.工廠方法模式說明 工廠方法模式 定義了乙個用於建立物件的介面,讓子類決定例項化哪乙個類,使得類的例項化延遲到其子類。3.與簡單工廠模式比較 1.簡單工廠模式可以根據傳入條件生成多個產品,而工廠方法模式每個工廠只生產乙個產品,所以需要多個工廠。2.簡單工廠是...
2 工廠方法模式
定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。需要新增新功能時,由改工廠類變成了修改客戶端。優點 克服了簡單工廠的違背開放 封閉原則的缺點。又保持了封裝物件建立過程的優點。降低了客戶端與產品物件的耦合。是簡單工廠模式的進一步抽象和推廣。由於使用了多...