www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號(hào)精選 > 程序喵大人
[導(dǎo)讀]大家好,我是程序喵 是的, 我又來了! 建造者模式用于構(gòu)造一個(gè)復(fù)雜的對(duì)象,強(qiáng)調(diào)的是一步步構(gòu)造對(duì)象,就像俄羅斯套娃一樣,必須按順序一步一步的套,才可以套娃成功。 如果提供了多個(gè)不同大小的娃,如何套,按什么順序套呢,可以把套娃這些繁瑣的操作交給中介

大家好,我是程序喵
是的,
我又來了!


建造者模式用于構(gòu)造一個(gè)復(fù)雜的對(duì)象,強(qiáng)調(diào)的是一步步構(gòu)造對(duì)象,就像俄羅斯套娃一樣,必須按順序一步一步的套,才可以套娃成功。


如果提供了多個(gè)不同大小的娃,如何套,按什么順序套呢,可以把套娃這些繁瑣的操作交給中介去做。這就是建造者模式,即外部只需要提供產(chǎn)品需要的各個(gè)零部件,將這些零部件提供給建造者,有個(gè)指揮家會(huì)指揮建造者一步步組裝成產(chǎn)品,外部不需要知道具體構(gòu)建細(xì)節(jié)就可以直接獲取產(chǎn)品。

#include <array>#include <iostream>
class Product { public: void SetFirst(int value) { this->first_ = value; flag_[0] = true; } void SetSecond(int value) { if (!flag_[0]) return; this->second_ = value; flag_[1] = true; } void SetThird(int value) { if (!flag_[0] || !flag_[1]) return; this->third_ = value; flag_[2] = true; } bool IsOk() { return flag_[0] && flag_[1] && flag_[2]; }
private: std::array<bool, 3> flag_; int first_; int second_; int third_;};
class AbstractBuilder { public: AbstractBuilder() {} virtual ~AbstractBuilder() {}
virtual void BuildFirst() = 0; virtual void BuildSecond() = 0; virtual void BuildThird() = 0; virtual Product* GetProduct() = 0;};
class ConcreteBuilder : public AbstractBuilder { public: ConcreteBuilder() { this->product_ = new Product(); } ~ConcreteBuilder() { delete this->product_; }
void BuildFirst() { this->product_->SetFirst(1); } void BuildSecond() { this->product_->SetSecond(2); } void BuildThird() { this->product_->SetThird(3); } Product* GetProduct() { return this->product_; }
private: Product* product_;};
class Director { public: Director(AbstractBuilder* builder) { this->builder_ = builder; } ~Director() {}
Product* Construct() { this->builder_->BuildFirst(); this->builder_->BuildSecond(); this->builder_->BuildThird(); return this->builder_->GetProduct(); }
private: AbstractBuilder* builder_;};
int main() { AbstractBuilder* builder = new ConcreteBuilder(); Director* director = new Director(builder); Product* product = director->Construct(); std::cout << product->IsOk() << std::endl; return 0;}

可以看到代碼中引入了Director,它作為指揮家,一方面隔離產(chǎn)品的創(chuàng)建過程,一方面控制產(chǎn)品的創(chuàng)建步驟。外部只需要知道具體建造者的類型,指揮家就可以調(diào)用建造者的相應(yīng)方法去構(gòu)建,外部就可以獲取一個(gè)完整的產(chǎn)品對(duì)象。

建造者模式不僅解耦了產(chǎn)品的創(chuàng)建過程,而且每一個(gè)具體建造者都相對(duì)獨(dú)立,通過傳入不同的具體建造者給指揮家,就可以得到不同的產(chǎn)品對(duì)象,通過增加不同的具體建造者就可以得到更多的產(chǎn)品對(duì)象,符合開閉原則。

建造者模式中所創(chuàng)建的產(chǎn)品一般創(chuàng)建步驟都比較相似,如果產(chǎn)品之間差異較大,則不適合使用建造者模式。

沒錯(cuò),今天的文章就是這么短




往期推薦



免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉