生活随笔
收集整理的這篇文章主要介紹了
设计模式C++实现(3)——建造者模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
軟件領(lǐng)域中的設(shè)計(jì)模式為開發(fā)人員提供了一種使用專家設(shè)計(jì)經(jīng)驗(yàn)的有效途徑。設(shè)計(jì)模式中運(yùn)用了面向?qū)ο缶幊陶Z(yǔ)言的重要特性:封裝、繼承、多態(tài),真正領(lǐng)悟設(shè)計(jì)模式的精髓是可能一個(gè)漫長(zhǎng)的過程,需要大量實(shí)踐經(jīng)驗(yàn)的積累。最近看設(shè)計(jì)模式的書,對(duì)于每個(gè)模式,用C++寫了個(gè)小例子,加深一下理解。主要參考《大話設(shè)計(jì)模式》和《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(DP)兩本書。本文介紹建造者模式的實(shí)現(xiàn)。
? ? ? ?建造者模式的定義將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示(DP)。《大話設(shè)計(jì)模式》舉了一個(gè)很好的例子——建造小人,一共需建造6個(gè)部分,頭部、身體、左右手、左右腳。與工廠模式不同,建造者模式是在導(dǎo)向者的控制下一步一步構(gòu)造產(chǎn)品的。建造小人就是在控制下一步步構(gòu)造出來的。創(chuàng)建者模式可以能更精細(xì)的控制構(gòu)建過程,從而能更精細(xì)的控制所得產(chǎn)品的內(nèi)部結(jié)構(gòu)。下面給出建造者模式的UML圖,以建造小人為實(shí)例。
? ? ? ? ? 對(duì)于客戶來說,只需知道導(dǎo)向者就可以了,通過導(dǎo)向者,客戶就能構(gòu)造復(fù)雜的對(duì)象,而不需要知道具體的構(gòu)造過程。下面給出小人例子的代碼實(shí)現(xiàn)。
[cpp]?view plaincopyprint?
class?Builder???? {?? public:?? ????virtual?void?BuildHead()?{}?? ????virtual?void?BuildBody()?{}?? ????virtual?void?BuildLeftArm(){}?? ????virtual?void?BuildRightArm()?{}?? ????virtual?void?BuildLeftLeg()?{}?? ????virtual?void?BuildRightLeg()?{}?? };?? ?? class?ThinBuilder?:?public?Builder?? {?? public:?? ????void?BuildHead()?{?cout<<"build?thin?body"<<endl;?}?? ????void?BuildBody()?{?cout<<"build?thin?head"<<endl;?}?? ????void?BuildLeftArm()?{?cout<<"build?thin?leftarm"<<endl;?}?? ????void?BuildRightArm()?{?cout<<"build?thin?rightarm"<<endl;?}?? ????void?BuildLeftLeg()?{?cout<<"build?thin?leftleg"<<endl;?}?? ????void?BuildRightLeg()?{?cout<<"build?thin?rightleg"<<endl;?}?? };?? ?? class?FatBuilder?:?public?Builder?? {?? public:?? ????void?BuildHead()?{?cout<<"build?fat?body"<<endl;?}?? ????void?BuildBody()?{?cout<<"build?fat?head"<<endl;?}?? ????void?BuildLeftArm()?{?cout<<"build?fat?leftarm"<<endl;?}?? ????void?BuildRightArm()?{?cout<<"build?fat?rightarm"<<endl;?}?? ????void?BuildLeftLeg()?{?cout<<"build?fat?leftleg"<<endl;?}?? ????void?BuildRightLeg()?{?cout<<"build?fat?rightleg"<<endl;?}?? };?? ?? class?Director???? {?? private:?? ????Builder?*m_pBuilder;?? public:?? ????Director(Builder?*builder)?{?m_pBuilder?=?builder;?}?? ????void?Create(){?? ????????m_pBuilder->BuildHead();?? ????????m_pBuilder->BuildBody();?? ????????m_pBuilder->BuildLeftArm();?? ????????m_pBuilder->BuildRightArm();?? ????????m_pBuilder->BuildLeftLeg();?? ????????m_pBuilder->BuildRightLeg();?? ????}?? };??
? ? ? ? ?客戶的使用方式:
[cpp]?view plaincopyprint?
int?main()?? {?? ????FatBuilder?thin;?? ????Director?director(&thin);?? ????director.Create();?? ????return?0;?? }??
? ? ?
? ?至此,《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書上的5種創(chuàng)建型模式介紹完了,分別是工廠方法模式、抽象工廠模式、原型模式、建造者模式、單例模式。
? ? ? ?設(shè)計(jì)模式C++實(shí)現(xiàn)(1)——工廠模式
?? ??設(shè)計(jì)模式C++實(shí)現(xiàn)(4)——單例模式
? ? ? ?設(shè)計(jì)模式C++實(shí)現(xiàn)(5)——原型模式、模板方法模式?
? ? ???本人享有博客文章的版權(quán),轉(zhuǎn)載請(qǐng)標(biāo)明出處 http://blog.csdn.net/wuzhekai1985
總結(jié)
以上是生活随笔為你收集整理的设计模式C++实现(3)——建造者模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。