簡單工廠:嚴格說並不是乙個設計模式。簡單工廠沒有抽象類,只有乙個具體工廠類如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手機型號,只需派生乙個該型號的工廠而無需修改原來的**。
符合封閉修改,開放擴充套件原則。、
如果每乙個工廠只生產一種產品,便是簡單工廠那樣。但是可以滿足ocp原則。
簡單工廠,工廠方法和抽象工廠的區別總結
最近這三個模式有點搞混了,而且網上也有類似情況。總結一下。簡單工廠 嚴格說並不是乙個設計模式。簡單工廠沒有抽象類,只有乙個具體工廠類如myfactory,然後myfactory裡面有個工廠方法createproduct返回乙個基類產品,具體返回什麼具體例項通過傳入引數然後用case判斷。用手機生產做...
簡單工廠 工廠方法 抽象工廠的區別
定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態 static 方法,因此簡單工廠模式又被稱為靜態工廠方法 優點 簡單易於實現,把類的例項化交給工廠,易於解耦。缺點 違反了ocp開閉原則。案例 jdk日期格式化dat...
簡單工廠 工廠方法 抽象工廠的區別
先看一下目錄結構 再說一下大致的邏輯,首先建立乙個起始介面,iuser,之後出現乙個使用者需要去實現這個使用者介面,按照以往的建立邏輯,每次乙個使用者進行一次new,工廠意味著自己不需要去在乎他的建立邏輯,不需要知道怎麼建立,只需要給定乙個約束值,通過這個約束值我就知道如何去建立自己想要的某個物件,...