亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++設計模式之抽象工廠模式

2020-01-26 15:17:33
字體:
來源:轉載
供稿:網友

問題描述

之前講到了C++設計模式――工廠方法模式,我們可能會想到,后期產品會越來越多了,建立的工廠也會越來越多,工廠進行了增長,工廠變的凌亂而難于管理;由于工廠方法模式創建的對象都是繼承于Product的,所以工廠方法模式中,每個工廠只能創建單一種類的產品,當需要生產一種全新的產品(不繼承自Product)時,發現工廠方法是心有余而力不足。

舉個例子來說:一個顯示器電路板廠商,旗下的顯示器電路板種類有非液晶的和液晶的;這個時候,廠商建造兩個工廠,工廠A負責生產非液晶顯示器電路板,工廠B負責生產液晶顯示器電路板;工廠一直就這樣運行著。有一天,總經理發現,直接生產顯示器的其余部分也挺掙錢,所以,總經理決定,再建立兩個工廠C和D;C負責生產非液晶顯示器的其余部件,D負責生產液晶顯示器的其余部件。此時,旁邊參謀的人就說了,經理,這樣做不好,我們可以直接在工廠A中添加一條負責生產非液晶顯示器的其余部件的生產線,在工廠B中添加一條生產液晶顯示器的其余部件的生產線,這樣就可以不用增加廠房,只用將現有廠房進行擴大一下,同時也方便工廠的管理,而且生產非液晶顯示器電路板的技術人員對非液晶顯示的其余部件的生產具有指導的作用,生產液晶顯示器電路板也是同理??偨浝戆l現這是一個不錯的主意。

再回到軟件開發的過程中來,工廠A和B就是之前所說的C++設計模式――工廠方法模式;總經理再次建立工廠C和D,就是重復C++設計模式――工廠方法模式,只是生產的產品不同罷了。這樣做的弊端就如參謀所說的那樣,增加了管理成本和人力成本。在面向對象開發的過程中,是很注重對象管理和維護的,對象越多,就越難進行管理和維護;如果工廠數量過多,那么管理和維護的成本將大大增加;雖然生產的是不同的產品,但是可以二者之間是有微妙的關系的,如參謀所說,技術人員的一些技術經驗是可以借鑒的,這就相當于同一個類中的不同對象,之間是可以公用某些資源的。那么,增加一條流水線,擴大廠房,當然是最好的主意了。

實際問題已經得到了解決,那么如何使用設計模式模擬這個實際的問題呢?那就是接下來所說的抽象工廠模式。

UML類圖

現在要講的抽象工廠模式,就是工廠方法模式的擴展和延伸,但是抽象工廠模式,更有一般性和代表性;它具有工廠方法具有的優點,也增加了解決實際問題的能力。

如圖所示,抽象工廠模式,就好比是兩個工廠方法模式的疊加。抽象工廠創建的是一系列相關的對象,其中創建的實現其實就是采用的工廠方法模式。在工廠Factory中的每一個方法,就好比是一條生產線,而生產線實際需要生產什么樣的產品,這是由Factory1和Factory2去決定的,這樣便延遲了具體子類的實例化;同時集中化了生產線的管理,節省了資源的浪費。

適用場合

工廠方法模式適用于產品種類結構單一的場合,為一類產品提供創建的接口;而抽象工廠方法適用于產品種類結構多的場合,主要用于創建一組(有多個種類)相關的產品,為它們提供創建的接口;就是當具有多個抽象角色時,抽象工廠便可以派上用場。

代碼實現

/*** FileName   : AbstractFactoryPatternDemo** Author    : Jelly Young** Date     : 2013/11/19** Description : More information*/  #include <iostream>using namespace std; // Product Aclass ProductA{public:  virtual void Show() = 0;}; class ProductA1 : public ProductA{public:  void Show()  {    cout<<"I'm ProductA1"<<endl;  }}; class ProductA2 : public ProductA{public:  void Show()  {    cout<<"I'm ProductA2"<<endl;  }}; // Product Bclass ProductB{public:  virtual void Show() = 0;}; class ProductB1 : public ProductB{public:  void Show()  {    cout<<"I'm ProductB1"<<endl;  }}; class ProductB2 : public ProductB{public:  void Show()  {    cout<<"I'm ProductB2"<<endl;  }}; // Factoryclass Factory{public:  virtual ProductA *CreateProductA() = 0;  virtual ProductB *CreateProductB() = 0;}; class Factory1 : public Factory{public:  ProductA *CreateProductA()  {    return new ProductA1();  }   ProductB *CreateProductB()  {    return new ProductB1();  }}; class Factory2 : public Factory{  ProductA *CreateProductA()  {    return new ProductA2();  }   ProductB *CreateProductB()  {    return new ProductB2();  }}; int main(int argc, char *argv[]){  Factory *factoryObj1 = new Factory1();  ProductA *productObjA1 = factoryObj1->CreateProductA();  ProductB *productObjB1 = factoryObj1->CreateProductB();   productObjA1->Show();  productObjB1->Show();   Factory *factoryObj2 = new Factory2();  ProductA *productObjA2 = factoryObj2->CreateProductA();  ProductB *productObjB2 = factoryObj2->CreateProductB();   productObjA2->Show();  productObjB2->Show();   if (factoryObj1 != NULL)  {    delete factoryObj1;    factoryObj1 = NULL;  }   if (productObjA1 != NULL)  {    delete productObjA1;    productObjA1= NULL;  }   if (productObjB1 != NULL)  {    delete productObjB1;    productObjB1 = NULL;  }   if (factoryObj2 != NULL)  {    delete factoryObj2;    factoryObj2 = NULL;  }   if (productObjA2 != NULL)  {    delete productObjA2;    productObjA2 = NULL;  }   if (productObjB2 != NULL)  {    delete productObjB2;    productObjB2 = NULL;  }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成在线视频| 国产精品视频xxx| 91久久精品国产91性色| 国产成+人+综合+亚洲欧美丁香花| 欧美激情videoshd| 国产精品稀缺呦系列在线| 中文.日本.精品| 国产美女精品视频免费观看| 久久精品欧美视频| 亚洲欧美成人一区二区在线电影| 久久久www成人免费精品| 日韩av电影院| 日韩中文字幕在线免费观看| 欧美日韩xxx| 亚洲男女自偷自拍图片另类| 2019日本中文字幕| 欧美在线视频导航| 国产精品久久网| 欧美午夜无遮挡| 自拍偷拍亚洲欧美| 亚洲区bt下载| 国产精品亚洲片夜色在线| 国产欧洲精品视频| 91在线免费视频| 亚洲国产日韩欧美在线图片| 中文字幕少妇一区二区三区| 亚洲网站在线观看| 欧美丝袜美女中出在线| 久久天堂电影网| 亚洲国产精品久久精品怡红院| 国产亚洲欧美日韩一区二区| 97婷婷涩涩精品一区| 91色琪琪电影亚洲精品久久| 欧美午夜精品久久久久久浪潮| 韩国日本不卡在线| 亚洲午夜小视频| 国产精品视频久久| 91九色视频导航| 日韩精品中文在线观看| 国产精品久久久久久久久久免费| 精品中文视频在线| 国产精品久久久久久av| 最近2019年中文视频免费在线观看| 91精品国产综合久久男男| 日韩精品日韩在线观看| 成人av在线网址| 国产精品免费一区豆花| 亚洲一区二区三区视频播放| 亚洲成人激情在线| 亚洲精品中文字幕女同| 亚洲精品乱码久久久久久按摩观| 精品美女永久免费视频| 国产一区二区三区视频在线观看| 久久久99久久精品女同性| 色噜噜狠狠色综合网图区| 国产精品jizz在线观看麻豆| 精品亚洲夜色av98在线观看| 亚洲第一黄色网| 91国产美女在线观看| 欧美韩国理论所午夜片917电影| 欧美一乱一性一交一视频| 久久成年人免费电影| 性欧美激情精品| 欧美午夜精品久久久久久人妖| 欧美精品aaa| 亚洲网站视频福利| 综合国产在线视频| 一区二区三区国产视频| 国产精品久久久久久久久久久久久| 久久亚洲精品小早川怜子66| 97在线观看视频国产| 欧美猛交ⅹxxx乱大交视频| 69久久夜色精品国产7777| 亚洲精品成人久久| 亚洲精品xxx| 96pao国产成视频永久免费| 久久久久久伊人| 欧美激情综合亚洲一二区| 在线日韩欧美视频| 欧美高清理论片| 国产在线视频2019最新视频| 国产亚洲一级高清| 国产视频精品在线| 成人乱人伦精品视频在线观看| 国产日韩av在线播放| 51精品国产黑色丝袜高跟鞋| 日本久久久久久久| 日韩人体视频一二区| 亚洲欧美中文另类| 日韩最新中文字幕电影免费看| 亚洲国产婷婷香蕉久久久久久| 亚洲伊人成综合成人网| 亚洲人成人99网站| 久久久国产视频| 一本色道久久综合亚洲精品小说| 国内精品久久久| 欧洲s码亚洲m码精品一区| 日本欧美精品在线| 亚洲 日韩 国产第一| www.久久久久| 精品国产成人在线| 久久99精品久久久久久噜噜| 日韩在线观看免费| 国产精品无码专区在线观看| 国产亚洲欧美视频| 午夜精品一区二区三区在线播放| 精品呦交小u女在线| 97视频色精品| 91精品视频免费看| 色婷婷综合久久久久| 久久亚洲精品一区| 成人黄色免费网站在线观看| 色综合久久精品亚洲国产| 亚洲女同性videos| www.亚洲成人| 欧美成人亚洲成人日韩成人| 亚洲精品综合久久中文字幕| 精品久久久久久久久久久| 久久久女人电视剧免费播放下载| 日本精品一区二区三区在线| 国产欧亚日韩视频| 日韩激情av在线播放| 欧美裸体xxxx极品少妇| 国产91精品最新在线播放| 亚洲国产精品一区二区三区| 中文字幕亚洲色图| 浅井舞香一区二区| 亚洲精品美女久久久| 欧美在线视频免费播放| 中文字幕亚洲一区二区三区五十路| 欧美久久精品一级黑人c片| 一区二区三区四区视频| 亚洲老板91色精品久久| 日韩精品在线免费观看| 性欧美视频videos6一9| 日本精品视频在线| 日韩精品在线视频| 九九热精品视频国产| 久久影院中文字幕| 久久久久久久国产精品| 欧美猛交免费看| 亚洲电影免费观看高清| 亚洲精品动漫久久久久| 成人h视频在线| 九九热精品在线| 国产一区二区三区网站| 欧美黑人巨大精品一区二区| 社区色欧美激情 | 在线电影av不卡网址| 亚洲成人免费网站| 欧美极品在线播放| 伊人亚洲福利一区二区三区| 国产精品黄色av| 成人av番号网| 国产www精品| 日韩在线中文视频| 亚洲激情在线视频| 欧美高清第一页| 欧美激情一二三| 韩国美女主播一区| 亚洲视频网站在线观看| 在线播放日韩欧美| 伊人久久久久久久久久| 日韩av电影手机在线观看|