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

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

C++設計模式之工廠方法模式

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

問題描述

之前講到了C++設計模式――簡單工廠模式,由于簡單工廠模式的局限性,比如:工廠現在能生產ProductA、ProductB和ProductC三種產品了,此時,需要增加生產ProductD產品;那么,首先是不是需要在產品枚舉類型中添加新的產品類型標識,然后,修改Factory類中的switch結構代碼。是的,這種對代碼的修改,對原有代碼的改動量較大,易產生編碼上的錯誤(雖然很簡單,如果工程大了,出錯也是在所難免的!?。。?。這種對代碼的修改是最原始,最野蠻的修改,本質上不能稱之為對代碼的擴展。同時,由于對已經存在的函數進行了修改,那么以前進行過的測試,都將是無效的,所有的測試,都將需要重新進行,所有的代碼都需要進行重新覆蓋。這種,增加成本,不能提高效率的事情,在公司是絕對不允許的(除非昏庸的PM)。出于種種原因,簡單工廠模式,在實際項目中使用的較少。那么該怎么辦?怎么辦呢?需要對原有代碼影響降到最小,同時能對原有功能進行擴展。

UML類圖

那么今天介紹的工廠方法模式,就隆重登場了。它只是對簡單工廠模式的擴展,在GOF的介紹中,它們是合并在一起的,而我則是單獨分開進行講解的,就是為了區分二者的利弊,便于大家在實際項目中進行更好的把握與應用。工廠方法模式是在簡單工廠模式的基礎上,對“工廠”添加了一個抽象層。將工廠共同的動作抽象出來,作為抽象類,而具體的行為由子類本身去實現,讓子類去決定生產什么樣的產品。

如圖,FactoryA專心負責生產ProductA,FactoryB專心負責生產ProductB,FactoryA和FactoryB之間沒有關系;如果到了后期,如果需要生產ProductC時,我們則可以創建一個FactoryC工廠類,該類專心負責生產ProductC類產品。由于FactoryA、FactoryB和FactoryC之間沒有關系,當加入FactoryC加入時,對FactoryA和FactoryB的工作沒有產生任何影響,那么對代碼進行測試時,只需要單獨對FactoryC和ProductC進行單元測試,而FactoryA和FactoryB則不用進行測試,則可省去大量無趣無味的測試工作。

適用場合

工廠方法模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

1.在設計的初期,就考慮到產品在后期會進行擴展的情況下,可以使用工廠方法模式;

2.產品結構較復雜的情況下,可以使用工廠方法模式;

由于使用設計模式是在詳細設計時,就需要進行定奪的,所以,需要權衡多方面的因素,而不能為了使用設計模式而使用設計模式。

代碼實現:

/*** FileName   : FactoryMethodPatternDemo** Author    : Jelly Young** Date     : 2013/11/18** Description : More information, please go to //www.49028c.com*/ #include <iostream>using namespace std; class Product{public:  virtual void Show() = 0;}; class ProductA : public Product{public:  void Show()  {    cout<< "I'm ProductA"<<endl;  }}; class ProductB : public Product{public:  void Show()  {    cout<< "I'm ProductB"<<endl;  }}; class Factory{public:  virtual Product *CreateProduct() = 0;}; class FactoryA : public Factory{public:  Product *CreateProduct()  {    return new ProductA ();  }}; class FactoryB : public Factory{public:  Product *CreateProduct()  {    return new ProductB ();  }}; int main(int argc , char *argv []){  Factory *factoryA = new FactoryA ();  Product *productA = factoryA->CreateProduct();  productA->Show();   Factory *factoryB = new FactoryB ();  Product *productB = factoryB->CreateProduct();  productB->Show();   if (factoryA != NULL)  {    delete factoryA;    factoryA = NULL;  }   if (productA != NULL)  {    delete productA;    productA = NULL;  }   if (factoryB != NULL)  {    delete factoryB;    factoryB = NULL;  }   if (productB != NULL)  {    delete productB;    productB = NULL;  }  return 0;}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品一区二区三区国产精品| 国产亚洲欧美aaaa| 成人av番号网| 亚洲图片在线综合| 日韩欧美在线免费观看| 亚洲欧洲偷拍精品| 精品国产一区久久久| 精品露脸国产偷人在视频| 精品magnet| 亚洲福利在线看| 中文字幕在线看视频国产欧美在线看完整| 国产精品视频在线观看| 成人a在线观看| 欧美综合一区第一页| 日韩欧美极品在线观看| 日韩69视频在线观看| 欧美一区二区大胆人体摄影专业网站| 久久免费国产精品1| www.精品av.com| 97精品一区二区视频在线观看| 亚洲春色另类小说| 性色av一区二区三区红粉影视| 国产成+人+综合+亚洲欧美丁香花| 日本一区二区在线播放| 久久久久久久一| 亚洲最大福利视频| 国产精品女主播视频| 成人午夜激情网| 久国内精品在线| 亚洲精品自拍第一页| 国产精品视频不卡| 不卡av在线网站| 国产精品一区二区三区久久久| 久久久最新网址| 色婷婷综合久久久久| 国产精品激情av电影在线观看| 亚洲精品中文字幕有码专区| 欧美日韩国产区| 精品日本高清在线播放| 国产午夜精品全部视频在线播放| 欧美日本高清一区| 欧美性在线视频| 亚洲日本中文字幕免费在线不卡| 91在线免费观看网站| 国产精品91视频| 欧美成人第一页| 久久久精品久久| 国产一区二区久久精品| 久久亚洲私人国产精品va| 中文字幕日韩在线观看| 亚洲精品国产精品国产自| 狠狠色狠狠色综合日日小说| 国产精品无av码在线观看| 亚洲毛片在线观看| 国产在线播放91| 日韩高清av一区二区三区| 国产69精品久久久久久| 中文字幕9999| 亚洲石原莉奈一区二区在线观看| 欧美高清电影在线看| 国产手机视频精品| 国内精品久久影院| 国产精品678| 欧美成人精品不卡视频在线观看| 亚洲最大的成人网| 国产欧美日韩综合精品| 国产69久久精品成人| 亚洲第一二三四五区| 亚洲国产精品久久久久| 国产精品露脸自拍| 亚洲精品国产suv| 麻豆国产va免费精品高清在线| 一区二区三区国产视频| 国模叶桐国产精品一区| 亚洲免费电影在线观看| 亚洲欧美中文字幕| 欧美成人精品在线观看| 日韩免费高清在线观看| 欧美日韩精品在线| 国产xxx69麻豆国语对白| 欧美精品一区在线播放| 欧美最猛性xxxxx(亚洲精品)| 亚洲视频精品在线| 欧美肥老太性生活视频| 久久久精品亚洲| 久久影视免费观看| 欧美电影院免费观看| 日韩av在线网| 欧美疯狂xxxx大交乱88av| 亚洲最大的成人网| 久久手机精品视频| 91chinesevideo永久地址| 北条麻妃99精品青青久久| 国产激情综合五月久久| 日韩精品免费在线观看| 视频在线一区二区| 国产成人一区二| 日韩精品在线视频| 国产精品美女无圣光视频| 精品亚洲精品福利线在观看| 欧美中文在线视频| 国产成人拍精品视频午夜网站| 欧美电影在线免费观看网站| 国产在线精品成人一区二区三区| 成人深夜直播免费观看| 亚洲成人网久久久| 欧美成人在线免费视频| 一区二区三区四区精品| 欧美精品18videos性欧美| 久久精品99无色码中文字幕| 欧美日韩国产精品一区二区不卡中文| 国产精品入口日韩视频大尺度| 97在线视频精品| 97国产成人精品视频| 日本欧美爱爱爱| 精品国产区一区二区三区在线观看| 欧美夫妻性生活xx| 欧美性开放视频| 亚洲网站在线播放| 国产香蕉97碰碰久久人人| 日韩久久精品电影| 欧美成人精品不卡视频在线观看| 亚洲欧美日韩区| 久久人人爽人人| 91国内产香蕉| 美女视频久久黄| 国产精品国产三级国产专播精品人| 亚洲人精品午夜在线观看| 亚洲天堂网站在线观看视频| 欧美激情日韩图片| 日韩精品免费在线视频观看| 亚洲欧美日韩国产中文| 久久这里只有精品视频首页| 欧美巨乳美女视频| 日本国产欧美一区二区三区| 麻豆国产va免费精品高清在线| 久久久久久亚洲精品| 国产精品美女午夜av| 欧美激情一区二区三区高清视频| 国产成人高潮免费观看精品| 国产综合色香蕉精品| 亚洲激情中文字幕| 日韩资源在线观看| 综合网日日天干夜夜久久| 免费av一区二区| 在线观看国产精品日韩av| 欧美一级大胆视频| 热99精品只有里视频精品| 色99之美女主播在线视频| 久久视频在线观看免费| 欧美在线视频a| 欧美电影免费观看电视剧大全| 成人激情视频在线播放| 成人av.网址在线网站| 色哟哟亚洲精品一区二区| 亚洲成人久久久久| 91免费看片网站| 国产午夜一区二区| 国产精品黄色影片导航在线观看| 久久不射电影网| 另类专区欧美制服同性| 亚洲人成77777在线观看网| 欧美激情伊人电影| 成人天堂噜噜噜|