C++ 工厂模式(设计模式)
工廠模式分為3種,即簡單工廠模式、工廠方法模式、抽象工廠模式,其實(shí)大同小異,總結(jié)下來就是:
簡單工廠模式:一個(gè)工廠,多個(gè)產(chǎn)品。產(chǎn)品需要有一個(gè)虛基類。通過傳入?yún)?shù),生成具體產(chǎn)品對(duì)象,并利用基類指針指向此對(duì)象。通過工廠獲取此虛基類指針,通過運(yùn)行時(shí)多肽,調(diào)用子類實(shí)現(xiàn)。??
?
// Factory.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 //#include "stdafx.h" #include<iostream>using namespace std;class Product { public:virtual void show() = 0; };class Product_A : public Product { public:void show(){cout << "Product_A" << endl;} };class Product_B : public Product { public:void show(){cout << "Product_B" << endl;} };class Factory { public:Product* Create(int i){switch (i){case 1:return new Product_A;break;case 2:return new Product_B;break;default:break;}} };int main() {Factory *factory = new Factory();factory->Create(1)->show();factory->Create(2)->show();system("pause");return 0; }工廠方法模式:多個(gè)工廠,多個(gè)產(chǎn)品,每個(gè)產(chǎn)品對(duì)應(yīng)于一個(gè)工廠。此時(shí)工廠和產(chǎn)品都是通過虛基類的方式構(gòu)建。對(duì)于簡單工廠模式,當(dāng)要增加一個(gè)新產(chǎn)品時(shí)候,就需要在工廠類中修改代碼,具體表現(xiàn)為多加一個(gè)參數(shù),來識(shí)別新的產(chǎn)品類型。此時(shí)違反了對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉的原則。基于此,工廠方法模式應(yīng)運(yùn)而生。當(dāng)增加一個(gè)新產(chǎn)品時(shí),同時(shí)增加一個(gè)新工廠。增加新工廠屬于擴(kuò)展,不會(huì)修改以前工廠類和產(chǎn)品類的任何代碼。可以看過多個(gè)獨(dú)立的簡單工廠模式構(gòu)成了工廠方法模式。
?
?
抽象工廠模式:多個(gè)工廠,多個(gè)產(chǎn)品,并且每個(gè)產(chǎn)品可以包含多個(gè)型號(hào)。此時(shí)工廠和產(chǎn)品都是通過虛基類的方式構(gòu)建。每一個(gè)工廠類可以生產(chǎn)同一個(gè)產(chǎn)品的多個(gè)型號(hào)。
#include <iostream> using namespace std; //定義抽象類 class product1 { public: virtual void show() = 0; }; //定義具體類 class product_A1 :public product1 { public: void show(){ cout << "product A1" << endl; } }; class product_B1 :public product1 { public: void show(){ cout << "product B1" << endl; } }; //定義抽象類 class product2 { public: virtual void show() = 0; }; //定義具體類 class product_A2 :public product2 { public: void show(){ cout << "product A2" << endl; } }; class product_B2 :public product2 { public: void show(){ cout << "product B2" << endl; } }; class Factory { public: virtual product1 *creat1() = 0; virtual product2 *creat2() = 0; }; class FactoryA { public: product1 *creat1(){ return new product_A1(); } product2 *creat2(){ return new product_A2(); } }; class FactoryB { public: product1 *creat1(){ return new product_B1(); } product2 *creat2(){ return new product_B2(); } }; int main() { FactoryA *factoryA = new FactoryA(); factoryA->creat1()->show(); factoryA->creat2()->show(); FactoryB *factoryB = new FactoryB(); factoryB->creat1()->show(); factoryB->creat2()->show(); return 0; }?
轉(zhuǎn)載自:?https://blog.csdn.net/jigetage/article/details/79605624
總結(jié)
以上是生活随笔為你收集整理的C++ 工厂模式(设计模式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何进行云主机带宽测试
- 下一篇: A quick presentation