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

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

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

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

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

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

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

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

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

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

C++,設(shè)計(jì)模式編程,建造者模式

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

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

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

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

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

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

實(shí)例

#include "stdafx.h" #include <stdlib.h> #include <iostream> using namespace std;   //抽象類,用來安排創(chuàng)建人的具體流程,其他類必須遵循這個(gè)流程,但是可以自己具體實(shí)現(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++,設(shè)計(jì)模式編程,建造者模式

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
成人免费xxxxx在线视频| 亚洲午夜国产一区99re久久| 最近中文字幕无免费| 少妇献身老头系列| 亚洲 欧美综合在线网络| 亚洲中文字幕一区二区| 国产一区二区三区四区hd| 日本护士做爰视频| 久久久国产精华液| 中文字幕第8页| 91精品在线免费观看| 亚洲综合视频在线观看| 国产精品入口免费麻豆| 久久久一本精品99久久精品| 一区二区欧美在线| 精品一成人岛国片在线观看| 麻豆蜜桃在线| 欧美精品三级在线观看| 日韩精品卡一| 中文字幕一区二区中文字幕| 精品淫伦v久久水蜜桃| 91高清视频在线| 性の欲びの女javhd| 国产精品久久一区二区三区| 激情亚洲影院在线观看| 在线看日韩欧美| 在线观看国产欧美| 久久视频在线| 天天干天天综合| 最近高清中文在线字幕在线观看1| 本田岬高潮一区二区三区| 日本粉色视频在线观看| 丰满爆乳一区二区三区| 色网综合在线观看| 自拍偷拍中文字幕| 曰本三级在线| 国产免费美女视频| 色综合久久久久久久久久久| 亚洲免费看黄网站| 97超超碰碰| 狠狠做深爱婷婷久久综合一区| 一区二区三区视频在线播放| 亚洲欧美日韩中文字幕在线观看| 成人毛片一区二区三区| 国产999精品| 久久久国产一区二区三区| 中文字幕无人区二| 欧美激情精品久久久久久久变态| 奇米777在线视频| 美女被久久久| 日韩高清人体午夜| 三级性生活视频| 国产精品护士白丝一区av| 久久精品无码一区| 色94色欧美sute亚洲线路二| 欧美日韩一本| 一区二区三区亚洲变态调教大结局| 国产伦精品一区二区三区在线播放| 最新亚洲激情| 三级理论午夜在线观看| 欧美国产日韩一区二区在线观看| 在线精品国产欧美| 1769国产精品| 九色自拍视频| 久久精品视频一| 欧美日韩视频一区二区| 精品国产乱码久久久久久88av| 国产毛片精品一区| 国产精品久久久久9999小说| 国产做受高潮69| 欧美一区二区三区婷婷| 亚洲欧洲一区二区三区在线观看| 五月天av网站| 亚洲国产美女视频| 极品少妇一区二区三区精品视频| 免费观看h片| 嫩草伊人久久精品少妇av杨幂| 男人的天堂成人在线| 久久众筹精品私拍模特| 国产在线观看a| 午夜激情视频网| 在线观看成年人网站| 亚洲国产国产亚洲一二三| 黄色免费在线看| 奶水喷射视频一区| 婷婷成人影院| 人人澡人人爽| 免费女人黄页| 欧美成免费一区二区视频| 精品视频二区| 一道本无吗dⅴd在线播放一区| 欧美黄色a视频| 再深点灬舒服灬太大了添少妇视频| 在线亚洲+欧美+日本专区| а中文在线天堂| 尤物av无码色av无码| 久操国产精品| 婷婷夜色潮精品综合在线| 亚洲成av人片在www色猫咪| 日日噜噜噜噜久久久精品毛片| 亚洲丝袜另类动漫二区| 欧美在线视频观看| 亚洲综合免费观看高清完整版| 亚洲人成人一区二区在线观看| 日韩中文视频免费在线观看| 国产欧美精品久久| 欧美男男大粗吊1069| 国产成人精品av| 美日韩一区二区| 国际精品欧美精品| 麻豆国产欧美一区二区三区r| 综合欧美国产视频二区| 亚洲欧美日韩一区在线观看| 色先锋久久av资源部| 国产成人免费视频app| 久久成人福利视频| 亚洲图片在线| 最新高清无码专区| 一本一道波多野毛片中文在线| 在线观看国产成人| 亚洲成人精品一区二区三区| 88久久精品无码一区二区毛片| 极品裸体白嫩激情啪啪国产精品| 强伦人妻一区二区三区| 亚洲国产精品成人精品| 无码人妻丰满熟妇奶水区码| 九九九热精品免费视频观看网站| 国产又粗又爽视频| 久久国产日韩欧美| 亚洲欧美日本精品| 亚洲一区二区观看| 国产在线一区二区三区欧美| 亚洲一区自拍偷拍| 日韩国产专区| 欧美人妻精品一区二区免费看| 97视频色精品| 久久综合第一页| 国产黄色片在线观看| 国内自拍九色| 在线播放国产一区二区三区| 69精品久久久| 亚洲高清免费在线| 日本wwwwwwwzzzzz视频| 国产精品久久久久久久牛牛| 国产精品久久久久免费a∨大胸| 日本在线免费网| 99精品在线视频观看| 久久免费影院| 婷婷五月精品中文字幕| 久久婷婷五月综合色丁香| 操操操干干干| 亚洲视频免费看| 久久综合五月天婷婷伊人| 蜜桃久久久久久| 欧美日韩不卡一区二区| 日韩中文字幕1| 美女91精品| 香蕉免费一区二区三区在线观看| 欧美变态凌虐bdsm| 黄色免费福利视频| 欧美色图第一页| 国内自拍九色| 粉嫩高清一区二区三区精品视频| 国产欧美午夜| 久久99深爱久久99精品| 欧美黄色成人网| 欧美日韩精品亚洲精品| 91社区国产高清| 国内精品一区二区三区| 亚洲人成在线网站| 精品国产美女在线| 国产一区国产二区国产三区| 日本韩国在线不卡| 久久精品国产亚洲av高清色欲| 91视频九色网站| 国产精品嫩草av| 91精品国产综合久久久久久豆腐| 精品丝袜一区二区三区| 东京久久高清| 国产在线999| 欧美孕妇性xxxⅹ精品hd| av免费精品一区二区三区| 少妇高潮一区二区三区99小说| 日韩手机在线观看| 免费一级欧美在线观看视频| 青青草成人在线| 麻豆国产尤物av尤物在线观看| 成人激情校园春色| 亚洲第一页在线视频| 亚洲午夜国产成人av电影男同| 91久久精品国产91性色69| 三级4级全黄60分钟| 99精彩视频在线观看免费| 亚洲欧美经典视频| 国产精品久久久乱弄| 九九九热999| 亚洲国产网站| 亚洲久久久久久久| 青青草原综合久久大伊人精品| 浮力影院欧美三级日本三级| 一区二区三区回区在观看免费视频| 北岛玲一区二区三区| 久久久久久网址| av片在线观看网站| 亚洲电影免费观看| 永久免费看mv网站入口亚洲| 欧美日韩国产va另类| 欧美激情国产日韩精品一区18| 91中文在线视频| 欧美日本在线观看| 91观看网站| 欧美激情欧美激情在线五月| 美女高潮视频在线看| 日本伦理一区二区三区| 蜜臀久久精品| 免费成人动漫| 中文字幕精品亚洲| 亚洲综合自拍一区| 欧美性受xxx黑人xyx性爽| 中文字幕一区电影| 欧美女优在线视频| 伊人再见免费在线观看高清版| 黄色片免费在线| 乱一区二区av| 中文在线日韩| 国产成人精品a视频一区| 中文字幕日本欧美| 免费人成视频在线| 国产极品嫩模在线视频一区| 一本到12不卡视频在线dvd| 亚洲妇女屁股眼交7| 国产在线观看免费麻豆| 在线观看免费av网址| 26uuu久久综合| 99精品国产高清在线观看| 成人免费在线观看入口| 国内精品久久久久久影视8| 红桃视频 国产| 97久久视频| 亚欧美中日韩视频| 3d动漫精品啪啪一区二区下载| 亚洲国产中文字幕在线观看| 欧美精品在线一区二区三区| 久久伊人精品| 国产高清日韩| 9999热视频| 久久久久久av无码免费看大片| 欧美大片黄色| 国产九色porny| 91丨porny丨蝌蚪视频| 涩涩视频在线观看免费| 麻豆一区二区三区视频| 精品众筹模特私拍视频| 好男人www社区| 中国老女人av| 91精品国产高清一区二区三区| 最近日韩免费视频| 亚洲欧美www| 国产精品欧美韩国日本久久| 国产精品久久久久久av福利| 久久亚洲成人av| 久久成人免费网站| 精品视频全国免费看| 欧美日本不卡视频| 中文字幕国内自拍| 日韩欧美精品在线不卡| 成人爽a毛片免费啪啪| 中文另类视频| 欧美色欧美亚洲高清在线视频| 成人欧美一区二区三区黑人麻豆| 中国女人内谢25xxxx免费视频| 爱豆国产剧免费观看大全剧苏畅| 亚洲va欧美va国产va天堂影院| 欧美激情精品久久久久| 久久久中文字幕| 思思久久99热只有频精品66| 国产在线看片免费视频在线观看| 国产精品久久久久永久免费看| 99在线观看| 亚洲免费一区二区| 波多野结衣视频一区二区| 97碰碰视频| 视频一区二区三区在线| 日韩**中文字幕毛片| 国产精品theporn动漫| 国产成人高清精品免费5388| 欧美成人精品h版在线观看| 亚洲人成网在线播放| 日韩久久精品| 久久视频国产精品免费视频在线| 一区二区三区精品久久久| 粉嫩一区二区三区在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 国产经品一区二区| 国产传媒一区二区| caoporen国产精品视频| 国内精品国产成人| 亚洲电影一区二区三区| 国产黄色在线播放| 一起操在线观看| 国产高清视频一区三区| 国产女优一区| 久久精品成人av| 亚洲综合电影一区二区三区| yellow91字幕网在线| 久久久久久亚洲av无码专区| 少妇精品无码一区二区免费视频| 综合激情婷婷| 欧美aaa大片视频一二区| 特黄特色特刺激视频免费播放| 亚洲日韩欧美视频一区| 国产精品三级av在线播放| 日日夜夜综合网| 亚洲综合在线网站| 香蕉久久夜色精品国产| 色又黄又爽网站www久久| 天天色天天射综合网| 国产情侣一区二区| av资源在线免费观看| 在线观看国产麻豆| 亚洲人视频在线观看| 91丨九色丨蝌蚪富婆spa| 欧美黄色免费视频| 麻豆传媒一区二区| 日韩欧美在线一区二区| 暖暖视频在线免费观看| 无圣光视频在线观看| mm131午夜|