設計模式 工廠三兄弟

2021-09-05 11:22:53 字數 1569 閱讀 9163

當學完設計模式之後,進行總結時,發現有三個很相似的模式,分別是:簡單工廠、工廠方法和抽象工廠,查閱資料後,人們都俗稱"工廠三兄弟"。經過對比後發現:他們是乙個層層遞進的過程,如果把抽象工廠比喻成大哥,那麼工廠方法就是二哥,簡單工廠就是三弟。他們都是建立型模式,其主要的功能都是幫助我們把物件的例項化部分取出來,進行抽象,然後優化系統的結構,來增強**的可擴充套件性。下面我們就來看看他們之間到底有什麼聯絡或者區別。

1.簡單工廠

簡單工廠模式是把一些相似的東西取出來,進行抽象,然後定義乙個工廠類,工廠類的作用是:通過接收不同的引數返回不同的物件例項。

比如我們可以把加減乘除抽象成乙個運算類,然後定義乙個簡單工廠來接收客戶輸入不同的運算型別,然後返回不同的物件例項。

結構圖如下:

簡單工廠的優點:

增強系統的靈活性,比如現在再增加一種運算,只需在運算類中新增乙個子類即可,客戶端不知道到工廠裡具體的細節,免除直接建立產品物件的責任。實現建立與使用分離。

簡單工廠的缺點:

再進行擴充套件運算時,修改了工廠裡面的**,破壞了封裝性,不符合開閉原則。而且工廠類如果職責過多,又違背了單一職責原則,邏輯混亂,對以後的系統擴充套件和維護帶來很大的麻煩。

2.工廠方法

工廠方法針對每一種產品分別提供乙個工廠類,通過不同的工廠例項來建立不同的產品例項。

比如還是加減乘除運算,我們給加法類建立乙個加法工廠,給減法建立乙個減法工廠,每個具體的工廠類只負責建立自己的物件產品。結構圖如下:

工廠方法的優點:

工廠方法解決了簡單工廠不符合開閉原則的問題,工廠方法模式是把具體物件建立交給相應的子類去做,比如我們現在要新增一種運算類,只需要新增相應的運算類和相應的工廠子類即可,符合開閉原則。每個具體的工廠子類只負責建立自己所對應的產品,符合單一職責原則。可以說工廠方法模式是簡單工廠的公升級版,即保留了簡單工廠的優點,又解決了簡單工廠的缺點。

工廠方法的缺點:

由於現在增加乙個新的產品,就要增加一對類,不但增加了系統的複雜性,也增加了系統的額外開發量。

3.抽象工廠

向客戶端提供乙個介面,使得客戶端在不必指定產品具體型別的情況下,建立多個產品物件。結構圖如下:

抽象工廠的優點:

在工廠方法模式中,只有乙個抽象產品類,只能建立乙個具體產品的例項,而抽象工廠模式有多個抽象產品類,可以建立多個抽象產品例項,這樣再增加乙個演算法時,只需要增加乙個工廠類就可以了。

抽象工廠的缺點:

增加新產品結構複雜,因為抽象工廠已經確定了可以被建立的產品。

總結:

從上面我們可以看出,工廠方法是簡單工廠的公升級版,而抽象工廠又彌補了工廠方法的缺點,所以抽象工廠才是真正的大哥。

設計模式 工廠三兄弟

設計模式一共有23種,光工廠模式就有三種,剛開始學的時候還能分的清楚,到後面越來越像了,總的來說目的都是為了易維護,易拓展 手段是封裝繼承和多型 原則是上篇部落格寫到的六大原則。但是既然這是前人留下的寶貴經驗並且成文流傳下來我們就應該先站在巨人的肩膀上。下面是通過對比的學習來研究工廠模式。定義 通過...

設計模式 工廠三兄弟

今天主要總結一下工廠三兄弟即 簡單工廠模式 工廠方法模式 抽象工廠模式,看的多了之後有點亂,所以需要及時總結。簡單工廠 定義乙個用於生產物件的類,封裝生產不同的產品例項的細節,使建立物件的邏輯和客戶端分離,客戶端只需向這個類發起請求即可獲得對應的產品例項,而無需關心物件的建立過程。簡單工廠模式主要由...

設計模式 工廠三兄弟

簡單工廠模式 工廠方法模式 抽象工廠模式都屬於建立型模式。這三個模式都是為了解決物件的建立而生。這三個工廠模式就像孿生兄弟一樣,總是讓人傻傻分不清楚。今天就依據個人理解對三個模式總結對比一下。一 定義 模式定義 簡單工廠別名靜態工廠方法 static factory method 模式。在簡單工廠模...