三種工廠模式的比較

2021-09-01 19:17:48 字數 1848 閱讀 5386

[size=small]轉來的

簡單工廠:

乙個具體工廠通過條件語句建立多個產品,產品的建立邏輯集中與乙個工廠類。

客戶端通過傳不同的引數給工廠,實現建立不同產品的目的

增加新產品時,需要修改工廠類、增加產品類,不符合ocp原則

工廠方法:

乙個工廠建立乙個產品,所有的具體工廠繼承自乙個抽象工廠。

客戶端先建立不同產品的工廠,再由工廠建立具體產品,產品的建立邏輯分散在每個具體工廠類中。

客戶端只依賴於抽象工廠與抽象產品,不依賴任何具體的工廠與具體產品

增加新產品時,需要增加工廠類和產品類,符合ocp原則

抽象工廠:

乙個具體工廠建立乙個產品族,乙個產品族是不同系列產品的組合,產品的建立的邏輯分在在每個具體工廠類中。所有的具體工廠繼承自同乙個抽象工廠。

客戶端建立不同產品族的工廠,產品族的工廠建立具體的產品對客戶端是不可見的。

增加新的產品族時,需要增加具體工廠類,符合ocp原則。

增加新產品時,需要修改具體工廠類和增加產品類,不符合ocp原則

如果沒有應對「多系列物件建立」的需求變化,則沒有必要使用抽象工廠模式,這時候使用簡單的靜態工廠完全可以。

上述3種模式都使客戶端脫離了與具體產品的耦合,客戶端不關注具體產品的生產方法。

另一篇簡單工廠:嚴格說並不是乙個設計模式。簡單工廠沒有抽象類,只有乙個具體工廠類如myfactory,然後myfactory裡面有個工廠方法createproduct返回乙個基類產品,具體返回什麼具體例項通過傳入引數然後用case判斷。

用手機生產做個例子:

比如nokia簡單工廠就是只有nokiafactory工廠類,工廠方法就是createnokiaphone,引數是nokia手機型號,根據不同型號建立不同的nokia手機(使用case)。很明顯的缺點就是nokia每發明乙個新型號的手機都需要修改簡單工廠類(增加case判斷),違反了封閉修改,開放擴充套件原則。

工廠方法:該模式有乙個抽象基類和若干個派生的具體工廠類,基類定義了乙個虛工廠方法返回指定產品類的基類,派生類需要實現該虛方法並建立具體產品類返回。注意工廠方法的每個具體工廠只負責返回一種產品類。

同樣以手機生產做例子:

nokia工廠方法模式有乙個工廠基類nokiafactory,注意此工廠和上面不一樣,是抽象的。該類定義乙個虛工廠方法createnokiaphone,該方法返回nokiaphone基類。然後不同型號的手機對應乙個該型號的手機工廠,比如n97factory,注意此工廠派生於nokiafactory基類,n97factory實現虛工廠方法,它返回值是具體的nokia手機類,如new n97phone。(注意n97phone是nokiaphone的派生類)這樣的優點就是,新出乙個nokia手機型號,只需派生乙個該型號的工廠而無需修改原來的**。符合封閉修改,開放擴充套件原則。

抽象工廠:該模式和工廠方法模式很相似,也是乙個抽象基類和若干個具體工廠類,不同的是抽象工廠的工廠基類定義了多個虛工廠方法,每個虛工廠方法負責返回一種產品,多個工廠方法返回多種產品,並且這些產品具有某些聯絡。

抽象工廠就不止生產nokia手機了,還生產相關的周邊產品,首先nokiafactory基類會定義兩個虛方法,乙個是createnokiaphone用來生產手機,另乙個是createnokiacharger用於生產對應型號的手機充電器(假定不同型號手機使用不同的充電器)。然後派生類n97factory就要生產兩種相關的產品,乙個是n97phone,還有乙個是n97charger,這兩個物件是對應的關係,因此封裝到抽象工廠來生產一系列相關的物件。

總結:用最簡單的話來概括就是,簡單工廠只有乙個具體工廠類來建立一種基類的多個不同派生類,工廠方法就是有多個派生於乙個基類的具體工廠類,每個具體工廠只生產一種基類的乙個派生類,抽象工廠也是只有乙個工廠基類,但是每個具體工廠生產多個相關基類的各乙個派生類。[/size]

三種工廠模式

本文介紹設計模式中的工廠模式。工廠模式,顧名思義,就是本來我們需要某樣東西,需要自己造,可有了工廠呢?我需要該東西時,只需告訴工廠,工廠就會生產該東西,一定程度上,把使用者和生產者分開了。解耦了。追本溯源,假設我們現在有乙個類a,類a裡需要類b的乙個物件,一般的處理是這樣,b b new b 但這樣...

三種工廠模式

include include include using namespace std class operation double geta const double getb const void seta double x void setb double y virtual double g...

三種工廠模式

簡單工廠模式不是23種裡的一種,簡而言之,就是有乙個專門生產某個產品的類。比如下圖中的滑鼠工廠,專業生產滑鼠,給引數0,生產戴爾滑鼠,給引數1,生產惠普滑鼠。工廠模式也就是滑鼠工廠是個父類,有生產滑鼠這個介面。戴爾滑鼠工廠,惠普滑鼠工廠繼承它,可以分別生產戴爾滑鼠,惠普滑鼠。生產哪種滑鼠不再由引數決...