设计模式之建造者模式
时间:2020-08-24 10:04:52
手机看文章
扫描二维码
随时随地手机看文章
[导读]大家好,我是程序喵 是的, 我又来了! 建造者模式用于构造一个复杂的对象,强调的是一步步构造对象,就像俄罗斯套娃一样,必须按顺序一步一步的套,才可以套娃成功。 如果提供了多个不同大小的娃,如何套,按什么顺序套呢,可以把套娃这些繁琐的操作交给中介
建造者模式用于构造一个复杂的对象,强调的是一步步构造对象,就像俄罗斯套娃一样,必须按顺序一步一步的套,才可以套娃成功。
如果提供了多个不同大小的娃,如何套,按什么顺序套呢,可以把套娃这些繁琐的操作交给中介去做。这就是建造者模式,即外部只需要提供产品需要的各个零部件,将这些零部件提供给建造者,有个指挥家会指挥建造者一步步组装成产品,外部不需要知道具体构建细节就可以直接获取产品。
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,它作为指挥家,一方面隔离产品的创建过程,一方面控制产品的创建步骤。外部只需要知道具体建造者的类型,指挥家就可以调用建造者的相应方法去构建,外部就可以获取一个完整的产品对象。
建造者模式不仅解耦了产品的创建过程,而且每一个具体建造者都相对独立,通过传入不同的具体建造者给指挥家,就可以得到不同的产品对象,通过增加不同的具体建造者就可以得到更多的产品对象,符合开闭原则。
建造者模式中所创建的产品一般创建步骤都比较相似,如果产品之间差异较大,则不适合使用建造者模式。
没错,今天的文章就是这么短
往期推荐
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!





