C++設(shè)計模式之抽象工廠模式
抽象工廠模式
模式定義
抽象工廠模式(Abstract Factory),提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定他們具體的類。
模式動機
通常是在運行時刻在創(chuàng)建一個ConcreteFactory類的實例,這個具體的工廠再創(chuàng)建具有特定實現(xiàn)的產(chǎn)品對象,也就是說,為創(chuàng)建不同的產(chǎn)品對象,客戶端應(yīng)使用不同的具體工廠。
UML類圖
源碼實現(xiàn)
abstractproducta.h
#include <string> class AbstracProductA { public: AbstracProductA(); virtual ~AbstracProductA(); void Show(); virtual std::string Name(); }; class ConcreteProductA1 : public AbstracProductA { public: ConcreteProductA1(); std::string Name() override; }; class ConcreteProductA2 : public AbstracProductA { public: ConcreteProductA2(); std::string Name() override; };
abstractfactory.h
#include "abstracproducta.h" #include "abstracproductb.h" class AbstractFactory { public: AbstractFactory(); virtual ~AbstractFactory(); virtual AbstracProductA* CreateProductA() = 0; virtual AbstracProductB* CreateProductB() = 0; }; class ConcreteFactory1 : public AbstractFactory { public: ConcreteFactory1(); AbstracProductA* CreateProductA() override; AbstracProductB* CreateProductB() override; }; class ConcreteFactory2 : public AbstractFactory { public: ConcreteFactory2(); AbstracProductA* CreateProductA() override; AbstracProductB* CreateProductB() override; };
main.cpp
#include <iostream> #include "abstractfactory.h" #include "abstracproducta.h" #include "abstracproductb.h" using namespace std; int main() { AbstractFactory* factory1 = new ConcreteFactory1(); AbstracProductA* pA1 = factory1->CreateProductA(); AbstracProductB* pB1 =factory1->CreateProductB(); pA1->Show(); pB1->Show(); AbstractFactory* factory2 = new ConcreteFactory2(); AbstracProductA* pA2 = factory2->CreateProductA(); AbstracProductB* pB2 =factory2->CreateProductB(); pA2->Show(); pB2->Show(); return 0; }
運行結(jié)果
優(yōu)點
抽象工廠模式的優(yōu)點
- 好處是易于交換產(chǎn)品系列,由于具體工廠類,在一個應(yīng)用中只需要在初始化的時候出現(xiàn)一次,這就使得該百年一個應(yīng)用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產(chǎn)品配置。
- 它讓具體的創(chuàng)建實例過程與客戶端分離,客戶端是通過它們的抽象接口操縱實例,產(chǎn)品的具體類名也被具體工廠的實現(xiàn)分離,不會出現(xiàn)在客戶代碼中。
缺點
模式的缺點
- 所有在用簡單工廠的地方,都可以考慮用反射技術(shù)來去除switch或if,接觸分支判斷帶來的耦合。
感悟
一個程序員如果從來沒有熬夜寫程序的經(jīng)歷,不能算是一個好程序猿,因為他沒有癡迷過,所以他不會有大成就。
到此這篇關(guān)于C++設(shè)計模式實現(xiàn)抽象工廠模式的文章就介紹到這了,更多相關(guān)C++ 抽象工廠模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++設(shè)計模式之Static Factory模式詳解
這篇文章主要為大家詳細介紹了C++設(shè)計模式之Static Factory模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07C++?vector與數(shù)組轉(zhuǎn)換寫入/讀出文件方式
這篇文章主要介紹了C++?vector與數(shù)組轉(zhuǎn)換寫入/讀出文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11