之前講到了c++設計模式——工廠方法模式,我們可能會想到,後期產品會越來越多了,建立的工廠也會越來越多,工廠進行了增長,工廠變的凌亂而難於管理;由於工廠方法模式建立的物件都是繼承於product的,所以工廠方法模式中,每個工廠只能建立單一種類的產品,當需要生產一種全新的產品(不繼承自product)時,發現工廠方法是心有餘而力不足。
舉個例子來說:乙個顯示器電路板廠商,旗下的顯示器電路板種類有非液晶的和液晶的;這個時候,廠商建造兩個工廠,工廠a負責生產非液晶顯示器電路板,工廠b負責生產液晶顯示器電路板;工廠一直就這樣執行著。有一天,總經理發現,直接生產顯示器的其餘部分也挺掙錢,所以,總經理決定,再建立兩個工廠c和d;c負責生產非液晶顯示器的其餘部件,d負責生產液晶顯示器的其餘部件。此時,旁邊參謀的人就說了,經理,這樣做不好,我們可以直接在工廠a中新增一條負責生產非液晶顯示器的其餘部件的生產線,在工廠b中新增一條生產液晶顯示器的其餘部件的生產線,這樣就可以不用增加廠房,只用將現有廠房進行擴大一下,同時也方便工廠的管理,而且生產非液晶顯示器電路板的技術人員對非液晶顯示的其餘部件的生產具有指導的作用,生產液晶顯示器電路板也是同理。總經理發現這是乙個不錯的主意。
再回到軟體開發的過程中來,工廠a和b就是之前所說的了c++設計模式——工廠方法模式;總經理再次建立工廠c和d,就是重複了c++設計模式——工廠方法模式,只是生產的產品不同罷了。這樣做的弊端就如參謀所說的那樣,增加了管理成本和人力成本。在物件導向開發的過程中,是很注重物件管理和維護的,物件越多,就越難進行管理和維護;如果工廠數量過多,那麼管理和維護的成本將大大增加;雖然生產的是不同的產品,但是可以二者之間是有微妙的關係的,如參謀所說,技術人員的一些技術經驗是可以借鑑的,這就相當於同乙個類中的不同物件,之間是可以公用某些資源的。那麼,增加一條流水線,擴大廠房,當然是最好的主意了。
實際問題已經得到了解決,那麼如何使用設計模式模擬這個實際的問題呢?那就是接下來所說的抽象工廠模式。
現在要講的抽象工廠模式,就是工廠方法模式的擴充套件和延伸,但是抽象工廠模式,更有一般性和代表性;它具有工廠方法具有的優點,也增加了解決實際問題的能力。
如圖所示,抽象工廠模式,就好比是兩個工廠方法模式的疊加。抽象工廠建立的是一系列相關的物件,其中建立的實現其實就是採用的工廠方法模式。在工廠factory中的每乙個方法,就好比是一條生產線,而生產線實際需要生產什麼樣的產品,這是由factory1和factory2去決定的,這樣便延遲了具體子類的例項化;同時集中化了生產線的管理,節省了資源的浪費。
工廠方法模式適用於產品種類結構單一的場合,為一類產品提供建立的介面;而抽象工廠方法適用於產品種類結構多的場合,主要用於建立一組(有多個種類)相關的產品,為它們提供建立的介面;就是當具有多個抽象角色時,抽象工廠便可以派上用場。
/*
** filename : abstractfactorypatterndemo
** author : mr_yellow黃
** date : 2019/12/18
*/#include
using
namespace std;
// product a
class
producta
;class
producta1
:public producta};
class
producta2
:public producta};
// product b
class
productb
;class
productb1
:public productb};
class
productb2
:public productb};
// factory
class
factory
;class
factory1
:public factory
productb *
createproductb()
};class
factory2
:public factory
productb *
createproductb()
};intmain
(int argc,
char
*ar**)
if(productobja1 !=
null)if
(productobjb1 !=
null)if
(factoryobj2 !=
null)if
(productobja2 !=
null)if
(productobjb2 !=
null
)}
C 設計模式之抽象工廠模式
抽象工廠模式 比工廠模式具有更高層次的抽象性,當要返回一系列相關類中的某一格,而對每個類都能根據需要返回不同的物件時候,這種模式就派上了用場。換言之,抽象工廠是乙個工廠物件。它能返回一系列相關類中的某一格,可以用簡單工廠決定哪乙個類。下面這個例子作為抽象工廠模式的例子,希望能跟大家一起分享一起進步。...
c 設計模式之 抽象工廠模式
概念 抽象工廠模式提供了乙個建立相似或相關相互依賴的物件,而不需要說明其具體的實現.類結構圖 圖來自 wiki 示例 include class button class winbutton public button class macbutton public button class scro...
C 設計模式之抽象工廠模式
在 c 設計模式之工廠方法模式 一文中我們提到,由於簡單工廠模式當中的工廠類職責過重,嚴重違反了單一職責的原則,導致系統擴充套件十分困難,於是引出了工廠方法模式,工廠方法模式引入抽象的工廠類,具體的建立工作推遲到每個具體的工廠類中,這樣每個具體工廠類只負責一種產品的建立,這樣每個具體工廠類的職責就足...