大話設計模式 比較工廠三姐妹

2021-07-05 21:29:20 字數 3094 閱讀 7230

在沒開始看大話設計模式以為是本小人書呢,當我開始看書的時候發現真的是本小人書,通過生活的一些規律告訴我們各種設計模式,借用英語上的就是思維閃現,每次想到設計模式就能想到小故事,看到小故事就能想起是那個設計模式,所以大話設計模式可是本好書,就是以我的水平看讓人暈頭轉向的,而且在看大話模式的時候出現了三個叫工廠的,乙個簡單工廠,乙個是工廠方法,另外乙個是抽象工廠,當看見這三個工廠了就有種想比較他們的衝動,到底他們三個有什麼區別呢?下面看看我的總結來告訴你們:

拿乙個生產水杯(cup)的工廠舉例:起初,不用工廠模式,我必須在生產水杯之前知道水杯的材料和形狀等水杯的所有特徵才能生產,廠主發現同一形狀的被子,只是材料不同,如乙個是玻璃(glass)的,乙個是瓷(china)的,但是確要兩條生產線,顯然有資源浪費的嫌疑。現在廠主生產杯子時先不讓生產線知道我要產的是玻璃的還是瓷的,而是讓它在不知道具體材料的情況下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形狀的具體杯子了,所以就有了簡單工廠模式。簡單抽象工廠模式有乙個問題,就是當我現在想生產乙個同樣形狀的鐵杯時,工廠裡並沒有定義相應的處理流程,這就不合理了。我們需要改整條生產線,因為生產線在生產模具的時候還要考慮是為玻璃杯生產的模具還是為鐵杯生產的 模具,於是就有了工廠模式 ,如果現在工廠想要生產水壺,用工廠模式就不得不再造一條水壺生產線,能不能在水杯生產線同時生產水壺呢?這就是抽象工廠模式。  

又叫靜態工廠方法,是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。它的優點是包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。他的缺點是違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中。

一句話:用來生產同一等級結構中的任意產品(不支援增加新產品)

缺點:當需要增加新產品時,需要修改工廠類,不符合開放封閉原則。

他的結構圖(如下):

簡單工廠模式

簡單工廠例項:

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,使乙個類的例項化延遲到其子類。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,

優點:使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。解決了許多簡單工廠模式的問題,首先完全實現『開-閉 原則』,實現了可擴充套件。其次更複雜的層次結構,可以應用於產品結果複雜的場合。工廠方法實現時,客戶端需要決定例項化哪乙個工廠,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部的邏輯判斷移到了客戶端進行。要想增加功能,簡單工廠模式是該工廠類,工廠方法是該客戶端。

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

(2) 客戶端先建立不同產品工廠,再由工廠建立具體產品,

(3 )產品的建立邏輯分散在每個具體工廠中。客戶端只依賴於抽象工廠與抽象產品,不依賴於具體的工廠與具體產品增。加新產品是需要增加工廠類和產品類。

結構圖(如下圖):

工廠方法模式

工廠方法模式例項:

提供乙個建立一系列相關或相互依賴物件的介面,而無需制定他們具體的類

用來生產不同產品族的全部產品,易於交換產品系列。(對於增加新產品,無能為力,支援增加產品族)。

(1)易於互動產品系列,由於具體工廠類,在乙個應用中只需要在初始化的時候出現一次,這就使得改變乙個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。

(2)它讓具體的建立例項過程與客戶端分離,客戶端是通過他們的抽象介面操作例項,產品的具體類名也被具體工廠的實現分離,不會出現在客戶**中。

抽象工廠模式的缺點:

(1)是如果增加乙個功能,至少要增加乙個抽象產品abstractproductc和兩個具體產品productc1、productc2,還得更改抽象工廠介面abstractfactory和具體的工廠concretefactory1、concretefactory2.

結構圖:

1  工廠方法  除將產品抽象出乙個介面以便實現多型,還將不同的工廠進行細分,統一繼承自乙個介面,將簡單工廠中的判斷移至客戶端。實現了開-閉原則。

2 客戶端若使用乙個工廠物件生產多個產品,而簡單工廠需要修改每個生產函式的引數,工廠方法模式只需修改初始化語句。

工廠方法模式:乙個抽象產品類,可以派生出多個具體產品類。

乙個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類只能建立乙個具體產品類的例項。

抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。

乙個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類可以建立多個具體產品類的例項。

1、工廠方法模式只有乙個抽象產品類,而抽象工廠模式有多個。

2、工廠方法模式的具體工廠類只能建立乙個具體產品類的例項,而抽象工廠模式可以建立多個。

3、工廠方法模式提供的是對乙個產品的等級模式,,而抽象工廠方法提供的是對多個產品的等級模式。

按照順序,是抽象程度依次加深。簡單工廠模式最易理解。當需要乙個相同的介面,但裡面完成內容不同的時候,就可以用乙個工廠來產生其中多個類的乙個例項。它最明顯的是有乙個工廠類來產生介面例項。無論是簡單工廠模式、工廠模式還是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留作介面,以達到最大程度上的復用。

簡單工廠模式只有乙份抽象的產品,工廠是具體的;(普通)工廠模式的同樣也只有乙份抽象的產品,但工廠有抽象的了;抽象工廠模式工廠當然是抽象的,但是它獨特的地方在於產品至少有兩份是抽象的。

希望大家多多指導!

設計模式 工廠三姐妹

工廠三姐妹,指的就是簡單工廠模式,工廠方法模式,和抽象工廠模式。他們三個都屬於建立型模型,主要用於描述如何建立物件。這三個姐妹之間有相似的地方,也有很多不同的地方,下面讓我們來具體看看他們的介紹和區別吧。簡單工廠模式 factory pattern 定義乙個工廠類,它可以根據引數的不同返回不同類的例...

設計模式 工廠三姐妹

簡單工廠模式 簡單工廠模式是屬於建立型模式,又稱靜態工廠方法模式。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。實質 ...

設計模式總結1 工廠三姐妹

前言 設計模式的總結已經開始,回想起來自己也有一段時間沒有好好總結了,雖說自考很重要,但若經常因為這種時間分配不均的情況而顧此失彼,這不是我們倡導的學習方法,所以,還要不斷進步啊 今天要總結的,是設計模式中的三個模式 工廠三姐妹 簡單工廠模式 工廠方法模式,和抽象工廠模式。首先我們來看一下三個工廠的...