日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

设计模式:抽象工厂模式(C++)【工厂方法升级】

發布時間:2025/3/15 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式:抽象工厂模式(C++)【工厂方法升级】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

抽象工廠模式介紹

在上一集的設計模式:工廠方法模式(C++)我們使用工廠方法模式能帶來一系列的好處,我們將生成產品的工廠類進行了抽象化,一種產品 用專門的工廠進行生產。我們也知道 當產品種類特別多的時候 我們的工廠類會變的非常的多 ,產品有多少種,那么我們生成對應產品的工廠列就有多少種!難度沒有更好一點的辦法么?當然有嘛,有更好的設計模式來解決這個問題嘛。試想一下 一個工廠難道就只能生成一種產品?當然不是,可以生產一系列的產品。那么我們就可以進一步的抽象,工廠能夠生成一系列的產品

我們的抽象工廠模式 就是將工廠進行抽象 ,但是它是生產一系列的產品 ,它是針對產品族的!產品 對應的有多個產品系列。比如說我們以汽車工廠舉例,抽象的汽車工廠可以生產寶馬車、奔馳車、哈弗車。我們的具體工廠->中國工廠生產 國產寶馬、國產奔馳、國產哈弗 這一系列的產品。寶馬產品族 可以有 國產寶馬、日產寶馬、美國產的寶馬。請看下面的模型圖。

抽象工廠模式模型圖


抽象工廠模式代碼

Car.h 汽車類相關代碼

#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; //寶馬汽車基類 抽象寶馬車 class BMWCar { public:BMWCar(string name){this->name = name;}virtual void run() = 0;//純虛函數void setName(string name){this->name = name;}string getName(){return this->name;} private:string name; }; //奔馳汽車基類 抽象奔馳車 class BenzCar { public:BenzCar(string name){this->name = name;}virtual void run() = 0;//純虛函數void setName(string name){this->name = name;}string getName(){return this->name;} private:string name; }; //哈弗汽車基類 抽象哈弗車 class HavalCar { public:HavalCar(string name){this->name = name;}virtual void run() = 0;//純虛函數void setName(string name){this->name = name;}string getName(){return this->name;} private:string name; }; //國產寶馬 class ChinaBMW :public BMWCar { public:ChinaBMW(string name) :BMWCar(name){}void run(){cout << this->getName() << "已經啟動。" << "國產寶馬汽車歡迎您。" << endl;} }; //國產奔馳 class ChinaBenz :public BenzCar { public:ChinaBenz(string name) :BenzCar(name){}void run(){cout << this->getName() << "已經啟動。" << "國產奔馳汽車歡迎您。" << endl;} }; //國產哈弗 class ChinaHaval :public HavalCar { public:ChinaHaval(string name) :HavalCar(name){}void run(){cout << this->getName() << "已經啟動。" << "國產哈弗汽車歡迎您。" << endl;} }; //美國寶馬 class AmericaBMW :public BMWCar { public:AmericaBMW(string name) :BMWCar(name){}void run(){cout << this->getName() << "已經啟動。" << "美國寶馬汽車歡迎您。" << endl;} }; //美國奔馳 class AmericaBenz :public BenzCar { public:AmericaBenz(string name) :BenzCar(name){}void run(){cout << this->getName() << "已經啟動。" << "美國奔馳汽車歡迎您。" << endl;} }; //美國哈弗 class AmericaHaval :public HavalCar { public:AmericaHaval(string name) :HavalCar(name){}void run(){cout << this->getName() << "已經啟動。" << "美國哈弗汽車歡迎您。" << endl;} }; //小日本造的寶馬 class JapanBMW :public BMWCar { public:JapanBMW(string name) :BMWCar(name){}void run(){cout << this->getName() << "已經啟動。" << "小日本造的寶馬汽車歡迎您。" << endl;} }; //小日本造的奔馳 class JapanBenz :public BenzCar { public:JapanBenz(string name) :BenzCar(name){}void run(){cout << this->getName() << "已經啟動。" << "小日本造的奔馳汽車歡迎您。" << endl;} }; //小日本造的哈弗 class JapanHaval :public HavalCar { public:JapanHaval(string name) :HavalCar(name){}void run(){cout << this->getName() << "已經啟動。" << "小日本造的哈弗汽車歡迎您。" << endl;} };

AbstractFactory.cpp 抽象工廠代碼

#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include "03 Car.h" using namespace std; /* 抽象工廠模式 針對的是產品族 每個具體的工廠 將生成不同系列的產品 */ class AbstractCarFactory { public:virtual BMWCar* CreateBMWCar() = 0;//純虛函數virtual BenzCar* CreateBenzCar() = 0;virtual HavalCar* CreateHavalCar() = 0; }; //中國工廠 在中國生產的系列產品 class ChinaCarFactory :public AbstractCarFactory { public:BMWCar* CreateBMWCar(){return new ChinaBMW("中國寶馬");}BenzCar* CreateBenzCar(){return new ChinaBenz("中國奔馳");}HavalCar* CreateHavalCar(){return new ChinaHaval("中國哈佛");} }; //美國工廠 class AmericaCarFactory :public AbstractCarFactory { public:BMWCar* CreateBMWCar(){return new AmericaBMW("美國牌寶馬");}BenzCar* CreateBenzCar(){return new AmericaBenz("美國牌奔馳");}HavalCar* CreateHavalCar(){return new AmericaHaval("美國牌哈佛");} }; //日本工廠 class JapanCarFactory :public AbstractCarFactory { public:BMWCar* CreateBMWCar(){return new JapanBMW("小日本造寶馬");}BenzCar* CreateBenzCar(){return new JapanBenz("小日本造奔馳");}HavalCar* CreateHavalCar(){return new JapanHaval("小日本造哈佛");} }; int main(int argc, char *argv[]) {AbstractCarFactory *chinaFactroy = new ChinaCarFactory();AbstractCarFactory *americaFactroy = new AmericaCarFactory();AbstractCarFactory *japanFactroy = new JapanCarFactory();//中國工廠生產的系列汽車BMWCar* chinaBMW = chinaFactroy->CreateBMWCar();BenzCar* chinaBenz = chinaFactroy->CreateBenzCar();HavalCar* chinaHaval = chinaFactroy->CreateHavalCar();//美國工廠生產的系列汽車BMWCar* americaBMW = americaFactroy->CreateBMWCar();BenzCar* americaBenz = americaFactroy->CreateBenzCar();HavalCar*americaHaval = americaFactroy->CreateHavalCar();//小日本工廠生產的系列汽車BMWCar* japanBMW = japanFactroy->CreateBMWCar();BenzCar* japanBenz = japanFactroy->CreateBenzCar();HavalCar*japanHaval = japanFactroy->CreateHavalCar();//汽車跑起來。。。chinaBMW ->run();chinaBenz ->run();chinaHaval->run();americaBMW->run();americaBenz->run();americaHaval->run();japanBMW->run();japanBenz->run();japanHaval->run();return EXIT_SUCCESS; }

代碼運行結果



總結

以上是生活随笔為你收集整理的设计模式:抽象工厂模式(C++)【工厂方法升级】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。