設計模式 簡單工廠 工廠方法 抽象工廠之小結與區別

2021-07-10 09:48:09 字數 2145 閱讀 9421

簡單工廠,工廠方法,抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽取了出來,優化了系統的架構,並且增強了系統的擴充套件性。

本文是本人對這三種模式學習後的乙個小結以及對他們之間的區別的理解。

簡單工廠

簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數的不同來返回不同的物件例項。

不修改**的話,是無法擴充套件的。

呼叫工廠,需要createoperator("/"),就能返回除法運算子。

優點:客戶端不需要修改**。

缺點: 當需要增加新的運算類的時候,不僅需新加運算類,還要修改工廠類,違反了開閉原則

工廠方法

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

在同一等級結構中,支援增加任意產品。

這個和簡單工廠有區別,簡單工廠模式只有乙個工廠,工廠方法模式對每乙個產品都有相應的工廠

好處:增加乙個運算類(例如n次方類),只需要增加運算類和相對應的工廠,兩個類,不需要修改工廠類。

缺點:增加運算類,會修改客戶端**,工廠方法只是把簡單工廠的內部邏輯判斷移到了客戶端進行。

抽象工廠

抽象工廠是應對產品族概念的。比如說,每個汽車公司可能要同時生產轎車,貨車,客車,那麼每乙個工廠都要有建立轎車,貨車和客車的方法。

應對產品族概念而生,增加新的產品線很容易,但是無法增加新的產品。

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

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

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

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

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

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

區別:工廠方法模式只有乙個抽象產品類,而抽象工廠模式有多個。

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

抽像工廠優缺:

優點:易於交換產品系列,例如access和sqlserver資料庫之間切換。

缺點:例如增加乙個機箱產品,不僅需要新增三個類「機箱類,微軟機箱,惠普機箱」,還要修改惠普工廠,微軟工廠支援製造機箱。而新增乙個聯想工廠的時候,只需要新增三個類,使用聯想工廠還是要修改客戶端**的。

在《大話設計模式》中,提出用簡單工廠模式改進抽象工廠模式的方法。

這樣,在dataaccess裡面直接指定資料庫(指定品牌),當需要換資料庫(or 品牌)的時候,修改dataaccess內的**。

當然可以用反射方法修改資料庫,這樣,只需要修改配置檔案。就完美的改善了抽象工廠的缺點,而且在客戶端不用修改**。

小結

★工廠模式中,重要的是工廠類,而不是產品類。產品類可以是多種形式,多層繼承或者是單個類都是可以的。但要明確的,工廠模式的介面只會返回一種型別的例項,這是在設計產品類的時候需要注意的,最好是有父類或者共同實現的介面。

★使用工廠模式,返回的例項一定是工廠建立的,而不是從其他物件中獲取的。

★工廠模式返回的例項可以不是新建立的,返回由工廠建立好的例項也是可以的。

區別

簡單工廠 : 用來生產同一等級結構中的任意產品。(對於增加新的產品,無能為力)

工廠方法 :用來生產同一等級結構中的固定產品。(支援增加任意產品)   

抽象工廠 :用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支援增加產品族)  

以上三種工廠 方法在等級結構和產品族這兩個方向上的支援程度不同。所以要根據情況考慮應該使用哪種方法。 

設計模式 簡單工廠 工廠方法 抽象工廠方法模式

簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...

設計模式 簡單工廠 工廠方法 抽象工廠

典型的介面和實現類如下,我們要根據相應的需求建立出不同的物件。public inte ce animal public class catimplements animal public class dogimplements animal public class animalfactory el...

設計模式 簡單工廠 工廠方法 抽象工廠

引言 最近發現一篇講解工廠模式比較簡易明了的文章,內容如下,原文連線為 簡單工廠模式 簡單工廠模式不是 23 種裡的一種,簡而言之,就是有乙個專門生產某個產品的類。比如下圖中的滑鼠工廠,專業生產滑鼠,給引數 0,生產戴爾滑鼠,給引數 1,生產惠普滑鼠。工廠模式也就是滑鼠工廠是個父類,有生產滑鼠這個介...