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

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

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


建造者模式用于構造一個復雜的對象,強調的是一步步構造對象,就像俄羅斯套娃一樣,必須按順序一步一步的套,才可以套娃成功。


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

#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,它作為指揮家,一方面隔離產品的創(chuàng)建過程,一方面控制產品的創(chuàng)建步驟。外部只需要知道具體建造者的類型,指揮家就可以調用建造者的相應方法去構建,外部就可以獲取一個完整的產品對象。

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

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

沒錯,今天的文章就是這么短




往期推薦



免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
關閉
關閉