設計模式完成學業,我是乙個研究躺在訂單,有三種模式其名稱中包含「工廠」這個詞眼,。它們就是「工廠三姐妹」,以下我們通過計算器的演示樣例來好好認識一下這姐妹三兒。
簡單工廠類中的**:
從中我們能夠看到。當使用者請求進行加法運算時,僅僅需operationfactory.createoperate("+"),工廠就會自己主動給出乙個加法類的例項,使用者根本不用和詳細的運算類打交道,物件的建立過程被封裝起來了。
可是假設我們要加入乙個冪運算,不僅要在運算類下加入冪運算的子類來擴充套件,還須要修改工廠類,加入新的case。這樣對修改也開放了。簡單工廠模式就是由於違背了開閉原則,而不能算得上乙個真正的設計模式。
當工廠類負責建立的物件比較少且不再增減,客戶僅僅知道傳入工廠類的引數的情況下,使用簡單工廠模式是個不錯的選擇。
同簡單工廠模式相比,我們能清晰地看到工廠類下多了詳細運算的工廠子類,工廠類介面的任務不那麼繁重了,僅僅有乙個建立抽象產品的方法:
全部生產詳細產品類的工廠。都要實現這個介面。client的**變成了這種:
ifactory ope***ctory=new addfactory();operation oper=ope***ctory.createoperation();
這樣就讓子類去決定例項化詳細的類了。分工更細了,責任到人。這時候,我們要加入冪運算僅僅需在工廠類和運算類下分別擴充套件一下,而不用改動**了,彌補了簡單工廠模式的不足之處。
當須要生產一系列的產品時,比方說有兩種級別的計算器,一種是我們常見的算術型計算器,一種是科學型計算器。它們都能計算加減乘除,而工廠方法模式實現的僅僅是一種計算器。這個時候,就要用抽象工廠模式了,真可謂山外有山,人外有人。
(自己舉得樣例。有不妥之處。請諒解)
這樣一來。客戶能夠更換產品的系列,想要算術型計算器,ifactory=new arithmeticfactory()。想要科學型的,ifactory=new
sciencefactory()。
工廠方法模式與抽象工廠模式的差別事實上就是兩句話:
前者僅僅有乙個抽象產品類。而後者有多個。前者
的詳細工廠類僅僅能建立乙個詳細產品類的例項,而抽象工廠模式能夠建立多個。
縱觀這三種模式,長江後浪推前浪。但不要以為抽象工廠模式就非常完美了,當我們要加入乘法運算呢?不僅有擴充套件還有修改。學習要靈活,這三姐妹能夠互相幫助呀,能夠讓簡單工廠模式來改進抽象工廠模式。事實上在全部用到簡單工廠的地方,都能夠考慮反射技術來去除switch或if,解除分支推斷帶來的耦合。
辦法總比困難多的。
這姐妹三兒就介紹到這兒了。今天先混個臉熟。以後打交道的日子多著呢。
設計模式 工廠三姐妹
工廠三姐妹,指的就是簡單工廠模式,工廠方法模式,和抽象工廠模式。他們三個都屬於建立型模型,主要用於描述如何建立物件。這三個姐妹之間有相似的地方,也有很多不同的地方,下面讓我們來具體看看他們的介紹和區別吧。簡單工廠模式 factory pattern 定義乙個工廠類,它可以根據引數的不同返回不同類的例...
設計模式 工廠三姐妹
簡單工廠模式 簡單工廠模式是屬於建立型模式,又稱靜態工廠方法模式。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。實質 ...
設計模式之工廠三姐妹解讀(三)
解讀工廠三姐妹 三 現在我們來說一下,工廠三姐妹中的公主吧!就是老三 抽象工廠模式啦!想信通過我們說了這麼多大家一定對設計模式感興趣了,對工廠三姐妹的老大老二也有了一些比較清晰的認識了。老規矩啦,先來一波定義所謂的抽象工廠模式 提供建立一系列相關或者相互依賴物件的介面,而無需指定具體的類。好像看起來...