C++设计模式——创建型模式之建造者模式(Builder)

tech2024-11-20  3

创建型模式之建造者模式(Builder)

建造者模式(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Builder:抽象的创造者,为创建一个产品对象的各个部件指定抽象的接口;

ConcreteBuilder:具体建造者,实现抽象Builder定义的接口来完成产品的各个部件的创建。

Director:指挥者,它是一个使用Builder接口的对象;

Product:具体的产品对象。

代码框架

#include <iostream> #include <string> using namespace std; class Product { public: Product() {}; ~Product() {}; void setPartAColor(string str) { ProductPartA = str; } void setPartBColor(string str) { ProductPartB = str; } void setPartCColor(string str) { ProductPartC = str; } public: string ProductPartA; string ProductPartB; string ProductPartC; }; class Builder { public: virtual void BuildPartA() = 0; virtual void BuildPartB() = 0; virtual void BuildPartC() = 0; virtual const Product& GetProduct() = 0; }; class ConcreteBuilder :public Builder { public: void BuildPartA() { _pro.setPartAColor("red"); } void BuildPartB() { _pro.setPartBColor("green"); } void BuildPartC() { _pro.setPartCColor("black"); } const Product& GetProduct() { cout << _pro.ProductPartA << " " <<_pro.ProductPartB << " " << _pro.ProductPartC << endl; return _pro; } private: Product _pro; }; class Director { public: Director(Builder* bld) { _bld = bld; } ~Director() {} void Construct() { _bld->BuildPartA(); _bld->BuildPartB(); _bld->BuildPartC(); _bld->GetProduct(); } private: Builder* _bld; }; int main() { ConcreteBuilder* builder = new ConcreteBuilder(); Director* director = new Director(builder); director->Construct(); }

通过上面的代码框架可以看出:Builder是对product构造部件分离(我们把产品的部件A,B,C构造想象成是一个很复杂的过程),Builder做的事情仅仅是对构造Product进行了封装,通过接口来构造不同的part,Director是整个设计模式的核心,它是真正的Product创造者,上述我们通过Construct封装了构造的过程,并且隐藏了组装的细节(对用户来说);所以如果想要改变一个产品的内部表示,只需要提供一个Builder就可以了。

Builder与AbstractFactory的区别

builder模式和AbstractFactory模式功能很相似,都是用来创建大的复杂的对象,他们的区别:

Builder模式强调的对构造过程的封装,多了一个Director来控制Product的创建,并隐藏其中的组装细节;AbstractFactory只是提供创建多个相互依赖对象的接口

 

 

 

 

 

 

最新回复(0)