日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

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

詳解C++設計模式編程中建造者模式的實現(xiàn)

2020-05-23 14:08:24
字體:
來源:轉載
供稿:網(wǎng)友
這篇文章主要介紹了C++設計模式編程中建造者模式的實現(xiàn),建造者模式將一個復雜對象的構建于它的表現(xiàn)分離,可以減少代碼冗余,需要的朋友可以參考下
 

建造者模式:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。這是建造者模式的標準表達,不過看著讓人迷惑,什么叫構建和表示的分離?一個對象使用構造函數(shù)構造之后不就固定了,只有通過它方法來改變它的屬性嗎?而且還要同樣的構建過程搞出不同的表示,怎么可能呢?多寫幾個構造函數(shù)?

其實多寫幾個構造函數(shù),根據(jù)不同參數(shù)設置對象不同的屬性,也可以達到這樣的效果,只是這樣就非常麻煩了,每次要增加一種表示就要添加一個構造函數(shù),將來構造函數(shù)會多得連自己都不記得了,這違背了開放-封閉的原則。

要不就只能設計幾個set函數(shù),每次屬性不一樣了,我就構造一個對象,然后用set函數(shù)改變對象的屬性。這樣也可以達到效果。只是代碼就會非常冗余了,每個要用到這個對象的地方,都要寫上好幾句語句,一旦對象有點什么變化,還得到處都改一遍,這樣就很容易出錯,以后別人看著這種神邏輯和神代碼估計也會崩潰了。而且這也違背了依賴倒轉的原則。

于是大神們就開始想了,不能加很多構造函數(shù),也不能直接用一堆set函數(shù),然后發(fā)現(xiàn),有些對象的構建是固定的幾個步驟的,就像一條流水線一樣,任何的產(chǎn)品都是通過每一個固定的步驟拼湊出來的。例如說一部手機,先放主板,再放屏幕,再放電池,再放外殼,貼個膜就能賣幾千了,每次推出新產(chǎn)品,就換個更好的主板,換個大點的屏幕,再整個大容量電池,貼個超牛B的高透膜,又能賣出個新價錢。就是說,這些步驟都沒有變,變的只是每個部分的東西。

這就是大神的厲害之處了,透過現(xiàn)象看本質,基本有變的,有不變的,那敢情好,面向對象的一個重要指導思想就是,封裝隔離變化的,留出不變的。于是他們就用一個Builder類把步驟中的每個部分封裝起來,這個類的主要作用就是生產(chǎn)每個部件,再抽象一下提升高度,這樣就依賴倒轉了,這樣每次只需要添加一個類,這個類還是這幾個部分,只是內(nèi)部的實現(xiàn)已經(jīng)不一樣了,這樣就滿足了開放-封閉的原則了。但還是有一個問題,光有Builder類還不行,雖然產(chǎn)品的每個部分都有對應的函數(shù),但是用起來的話,還是跟前面說的set函數(shù)一樣,一用就要使用一大堆函數(shù),也就是這變的東西是封裝起來了,但這不變的東西還沒留出來。這時,就添加一個Director類,這個類就是專門規(guī)定組裝產(chǎn)品的步驟的,這樣只要告訴Director使用哪個Builder,就能生產(chǎn)出不同的產(chǎn)品,對于客戶端來說,只看到用了Director的一個construct函數(shù),甚是方便。

再反過來看建造者模式的定義,構建指的就是生產(chǎn)一個產(chǎn)品的步驟,表示就是每個產(chǎn)品部分的具體實現(xiàn),通過Director封裝步驟,通過Builder封裝產(chǎn)品部分的實現(xiàn),再把他兩隔離開,就能隔離變的,留出不變的供客戶端使用。

C++,設計模式編程,建造者模式

圖中可以看到,Product是必須要知道,沒有抽象,但是這個產(chǎn)品卻可以由不同的部分組合而成。Director里的construct也是固定,沒有抽象出來,如果要更改步驟,也要添加一個函數(shù),或者再添一個Diector,所以建造者模式一般應用于步驟不會發(fā)生大的變化,而產(chǎn)品會發(fā)生大變化的情況。

常用的場景
C#中的StringBuilder就是一個建造者的例子,但只是一個建造者,還缺一個Director,不能算一個完整的建造者模式。建造者模式一般應用于構建產(chǎn)品的步驟(也可以稱為算法)不變,而每個步驟的具體實現(xiàn)又劇烈變化的情況。

優(yōu)點
1.隔離了構建的步驟和具體的實現(xiàn),為產(chǎn)品的具體實現(xiàn)提供了靈活度。

2.封裝和抽象了每個步驟的實現(xiàn),實現(xiàn)了依賴倒轉原則。

3.封裝了具體的步驟,減少了代碼的冗余。

缺點
1.要求構建產(chǎn)品的步驟(算法)是不能劇烈變化的,最好是不變的,這樣就影響了靈活度。

實例

#include "stdafx.h" #include <stdlib.h> #include <iostream> using namespace std;   //抽象類,用來安排創(chuàng)建人的具體流程,其他類必須遵循這個流程,但是可以自己具體實現(xiàn) class CPersonBuilder { public:  virtual void BuildHead()=0;  virtual void BuildBody()=0;  virtual void BuildArmLeft()=0;  virtual void BuildArmRight()=0;  virtual void BuildLegLeft()=0;  virtual void BuildLegRight()=0; };   //創(chuàng)建瘦子的類 class CThinPersonBuilder:public CPersonBuilder { public:  CThinPersonBuilder()  {  cout<<"is creating thin person "<<endl<<endl;  }  ~CThinPersonBuilder()  {  cout<<"is finished for thin person"<<endl<<endl;  } public:  void BuildHead()  {  cout<<"BuildHead"<<endl;  }  void BuildBody()  {  cout<<"BuildBody(thin)"<<endl;  }  void BuildArmLeft()  {  cout<<"BuildArmLeft"<<endl;  }  void BuildArmRight()  {  cout<<"BuildArmRight"<<endl;  }  void BuildLegLeft()  {  cout<<"BuildLegLeft"<<endl;  }  void BuildLegRight()  {  cout<<"BuildLegRight"<<endl;  } };  //創(chuàng)建胖子的類 class CFatPersonBuilder:public CPersonBuilder { public:  CFatPersonBuilder()  {  cout<<"is creating fat person"<<endl;  }  ~CFatPersonBuilder()  {  cout<<"is finished for fat person"<<endl;  } public:  void BuildHead()  {  cout<<"BuildHead"<<endl;  }  void BuildBody()  {  cout<<"BuildBody(Fat)"<<endl;  }  void BuildArmLeft()  {  cout<<"BuildArmLeft"<<endl;  }  void BuildArmRight()  {  cout<<"BuildArmRight"<<endl;  }  void BuildLegLeft()  {  cout<<"BuildLegLeft"<<endl;  }  void BuildLegRight()  {  cout<<"BuildLegRight"<<endl;  } };   //指揮者類,用來指揮創(chuàng)建的人是瘦子還是胖子 class CPersonDirector { public:  CPersonDirector(CPersonBuilder *p)  {  this->m_p=p;  }  const void CreatePerson(void) const  {  m_p->BuildHead();  m_p->BuildBody();  m_p->BuildArmLeft();  m_p->BuildArmRight();  m_p->BuildLegLeft();  m_p->BuildLegRight();  } private:  CPersonBuilder *m_p; };        int _tmain(int argc, _TCHAR* argv[]) {  cout<<"---------建造者模式測試案例------------------------"<<endl<<endl;    CThinPersonBuilder *p_tp=new CThinPersonBuilder();  CPersonDirector *p_dtp=new CPersonDirector(p_tp);  p_dtp->CreatePerson();  delete p_tp;  delete p_dtp;  p_tp=NULL;  p_dtp=NULL;  cout<<endl<<endl;   CFatPersonBuilder *p_fp=new CFatPersonBuilder();  CPersonDirector *p_dfp=new CPersonDirector(p_fp);  p_dfp->CreatePerson();  delete p_fp;  delete p_dfp;  p_fp=NULL;  p_dfp=NULL;  system("pause");  return 0; } 

C++,設計模式編程,建造者模式

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲小说春色综合另类电影| 日韩欧美色综合| 日韩精品视频在线| 欧美一卡2卡三卡4卡5免费| 亚洲大片免费看| 中文字幕亚洲高清| 最新中文在线视频| 日韩 国产 一区| 精品国产31久久久久久| 日韩视频在线观看一区| 国产中文伊人| 97国产视频| 日韩不卡在线观看| 亚洲成年人在线播放| 国内精品不卡| 日韩中文字幕在线播放| 国产在线一区二区视频| 欧美日韩尤物久久| 91精品国产亚洲| 中文字幕在线高清| 亚洲国产午夜精品| 日韩黄色在线播放| 黄色国产网站在线观看| 日韩精品―中文字幕| 国内精品露脸在线视频播放| 国产91大片| 欧美色视频一区二区三区在线观看 | 日韩在线观看视频一区二区| 欧美午夜精品在线| 国产视频1区2区| 欧美天堂一区二区| 日韩精品午夜| 日韩在线精品| 国产不卡一区二区在线观看| 精品久久91| 欧美日韩中文字幕| 激情久久99| 成人xxxx| 97视频在线| 天堂在线www天堂中文在线| 欧美三级中文字幕在线观看| 一区二区中文字幕在线| 久草亚洲一区| 在线观看国产一级片| 久久香蕉av| 日韩中文字幕二区| 亚洲福利一区二区三区| 韩国一区二区av| 视频一区二区精品的福利| 精品国产999| www.av中文字幕| 日韩中文欧美在线| 成人久久久久| 91精品国产高清久久久久久| 91亚洲国产| 日韩欧美一级在线播放| 欧美日韩在线第一页| 国产成人精品三级| av最新网址| 亚洲欧美99| 日韩视频在线一区| 中文字幕亚洲二区| 日本精品在线播放| 日韩欧美国产高清91| 国产三级中文字幕| 国产专区中文字幕| 日韩欧美在线精品| 在线视频不卡一区二区| 欧美日韩精品电影| 精品国产免费视频| 精品久久人人做人人爽| 久久久精品日韩| 精品午夜av| 91精品在线免费观看| 亚洲三级网站| 国产 欧美在线| 国产999在线观看| 国产一卡二卡3卡4卡四卡在线| 黄色在线播放网站| 国产嫩草影院久久久久| 一区在线播放视频| 一本一道综合狠狠老| 不卡在线一区二区| 免费视频国产一区| 久久99久久久欧美国产| 中文 欧美 日韩| 欧美日韩高清一区二区| 日韩精品视频网站| 日本不卡高清视频一区| 日韩欧美综合视频| 久久婷婷亚洲| 精品极品三级久久久久| 国产91欧美| 日韩福利视频导航| 一区二区三区四区五区视频在线观看 | 国产高清在线视频| 欧美另类久久久品| 一区二区不卡在线| 91色在线看| 国产xxx在线| 在线一区免费| 欧美日韩国产综合久久| 一区二区三区高清在线| 亚洲一区在线观看视频| 国产亚洲一区字幕| 欧美三级中文字幕| 国产wwww| 欧美日韩中文字幕在线观看| 欧美日韩高清一区二区| 免费在线视频一级不卡| 欧美日韩中文字幕一区| 91精品日本| 在线视频色在线| 久久精品黄色片| 黄色片免费在线| 国产羞羞视频在线播放| av一区二区高清| 欧美亚洲另类制服自拍| 日韩欧美中文免费| 精品久久久三级| 欧美一级免费在线观看| 成人a在线视频免费观看| 日韩免费视频一区二区视频在线观看 | 亚洲一区精品在线| 日韩欧美999| 国产成人精品日本亚洲专区61| 欧美色视频一区二区三区在线观看| 亚洲欧美中文字幕在线观看| 99视频在线看| 国产最新在线| 亚洲欧美日本另类| 国产成人精品免费网站| 国产日产一区二区三区| 亚洲一级影院| 国产日韩第一页v| 国产午夜精品一区二区三区视频| 亚洲.国产.中文慕字在线| 精品一二三区视频| 成人福利一区| 欧美日韩国产系列| 日韩在线欧美| 中文字幕亚洲一区在线观看| 国产欧美日韩视频在线| 欧美日韩国产三级| 免费视频最近日韩| 精品一性一色一乱农村| 精品三级久久| 日韩精品首页| 在线免费播放av| 日本啊v在线| 欧美日韩亚洲系列| 欧美日韩在线第一页| 99热最新网址| 精品视频资源站| 国产日韩电影| 欧美久久一二三四区| 国产日产一区二区| av高清一区| 日韩在线a电影| 视频一区视频二区中文| 欧美日韩国产91| av免费网站在线观看| 国产伦精品免费视频| 亚洲综合在线不卡| 国产网站av| 最近中文av字幕在线中文| 久久精品一二三| 国产99精品| 国产色在线 com| 久久精品欧美日韩精品| 国产永久在线观看| 日韩中文字幕在线观看视频| 久久激情中文| 一区二区在线看| 日韩综合精品| 中文字幕亚洲视频| 国产日韩在线亚洲字幕中文| 亚洲欧美中文字幕在线一区| 日韩专区中文字幕| 日韩欧美中文字幕在线观看| 久久久久久欧美| 亚洲一卡二卡在线观看| 欧美三级在线视频| 亚洲一区在线观看视频| 色屁屁一区二区| 亚洲乱码一区av黑人高潮| 国产啊啊啊视频在线观看| 欧美日韩精品综合| 久久精品www| 国产在线一在线二| 欧美日韩国产一二三| 久久69成人| 中文字幕一区二区三区精品| 国产福利一区二区在线精品| 精品网站999www| 欧美日韩中文字幕| 国产欧美日韩在线| 亚洲中午字幕| 国产99在线|亚洲| 91精品久久久久| 一区免费视频| 中文字幕精品视频在线| 亚洲黄色在线观看| 日韩欧美一级精品久久| 国产一区成人| 精品久久电影| 91精品免费看| 日韩中文字幕亚洲| 中文字幕在线视频久| 亚洲乱码一区av黑人高潮| av中文在线播放| 麻豆一区二区99久久久久| 国产视频一区三区| 91精品国产免费| 在线免费播放av| 国产亚洲人成a一在线v站| 国产卡1卡2卡三卡在线| 中文字幕亚洲国产| 国产福利一区二区在线精品| 久久婷婷国产| 国产欧美日韩成人| 最近中文字幕第一页| 国产黄色一区| 精品成人久久久| 极品久久久久久| 欧美成人精品在线| 91精品国产自产在线观看永久∴| 国产福利精品导航| 日韩在线视频一区| 精品人妻二区中文字幕| 欧美激情视频一区二区三区在线播放| 午夜国产福利一区二区| 国产一卡2卡3卡四卡网站| 欧美日韩国产不卡在线看| 中文字幕日韩欧美在线| 国产成人精品三级| 精品久久人人做人人爽| 日韩三级视频在线播放| 亚洲制服丝袜一区| 国产在线www| 国产一级在线免费观看| 91亚洲国产高清| 91久久精品视频| 国产免费一级| 99久久精品国产成人一区二区| www中文字幕| 国产在线看一区| 午夜高潮免费视频| 国产专区中文字幕| 欧美亚洲视频在线看网址| 一区二区日韩av| 国产视频一二区| 日韩国产欧美| 色综合天天性综合| 中文字幕在线官网| 色猫猫国产区一区二在线视频 | 日韩视频在线观看视频| 中文字幕精品视频在线| 亚洲最大黄色| 欧美日韩在线看| va中文字幕| av亚洲免费| 日韩精品在线播放| 午夜国产视频| 欧美日韩高清不卡| 日韩区欧美区| 国自产拍在线网站网址视频| 日韩精品中文在线观看| 国产成免费视频| 国产欧美日韩亚洲| 欧美亚洲天堂网| 91亚洲国产高清| 欧美日韩91| 一区二区不卡视频| 国产在线中文字幕| 日韩欧美国产免费播放| 国产婷婷精品| 欧美日韩国产一区| 欧美中文字幕视频在线观看| 日韩视频一区在线观看| 欧洲精品二区| 中文字幕精品一区二区三区在线| 天堂在线中文| 亚洲黄色一区二区| 日韩欧美高清在线| 91精品综合久久久久久| 亚洲欧美久久久| 一级日韩一级欧美| 国产三级中文字幕| 日韩精品资源二区在线| 国产日韩成人精品| 欧美日韩国产不卡| 日韩中文字幕国产| 97最新国自产拍视频在线完整在线看 | 一级片免费在线播放| 一区二区在线高清视频| 国产婷婷色一区二区三区| 日本亚洲欧美三级| 日韩精品视频在线观看视频| 国产男女av| 亚洲福利精品| 日韩综合精品| 91精品国产免费| 午夜少妇久久久久久久久| 中文精品在线| 国产丝袜一区二区| 亚洲福利一区二区三区| aa国产成人| 国产午夜精品久久| 精品国产99久久久久久| 最近高清中文在线字幕在线观看1| 国产在线中文字幕| 精品久久人人做人人爽 | 日韩在线不卡一区| 国产在线不卡av| 亚洲永久字幕| 久久久精品免费免费| 国产99对白在线播放| 欧美日韩性视频一区二区三区| 日韩1区在线| 欧美日韩国产影片| 日韩字幕在线观看| 欧美日韩国产中文精品字幕自在自线 | 深夜福利一区二区| 国产一级免费在线观看| 日韩精品三级| 国产午夜在线观看| 免费视频中文字幕| 欧美日韩综合在线观看| 国产欧美久久久精品影院| 91精品婷婷国产综合久久竹菊| 日韩欧美一级在线播放| 免费视频二区| 91久久精品在线| 一区二区91| 国产午夜在线观看| 久久香蕉av| 欧美婷婷精品激情| 中文字幕不卡三区| 午夜一区二区视频| 日本熟女一区二区| 91精品国产91综合久久蜜臀| 国产高潮久久久| 欧美天堂一区二区| 亚洲精品中文字幕乱码三区| 亚洲 欧美综合在线网络| 久久久99久久精品欧美| 国产中文伊人| 日韩亚洲国产欧美| 日韩国产91| 精品久久在线观看| 久久久精品99| 欧美日韩视频网站| 午夜亚洲一区| 欧美一级久久| 99国内精品| 又黄又www的网站| 午夜精品免费视频| 国产小视频在线| 亚洲福利一区| 天堂精品高清1区2区3区| 欧美日韩中文字幕在线| 一区三区二区视频| 99视频在线看| 欧美日韩国产在线| 国产三级中文字幕| 日韩欧美三级在线| 亚洲第一中文字幕在线观看| 国产婷婷色一区二区三区| 久久精品日韩无码| 日韩精品在线观| 国产一级粉嫩xxxx| 中文字幕在线观看欧美| 日韩欧美99| 在线视频第一页| 九色蝌蚪视频在线| 亚洲第一页中文字幕| 欧美日韩综合在线免费观看| 久久蜜桃精品| 国产一区久久久| www高清在线视频日韩欧美| 欧美高清一级片在线| 日韩精品视频在线观看网址 | 91蜜桃婷婷狠狠久久综合9色| 欧美日韩综合视频| 国产一区成人| 亚洲国产欧美91| 欧美日韩在线不卡一区| 在线视频三区| 欧美日韩精品欧美日韩精品| 日韩你懂的电影在线观看| 日韩一级在线视频| 91国内在线| 91精品国产综合久久久久久| 中文字幕欧美日韩精品| 欧洲精品久久久| 欧美成人二区| 国产欧美日韩不卡免费| 欧美日韩国产黄色| 99中文字幕一区|