设计模式--创建型- Builder(生成器/创建者)
1.意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2.结构图
3. 简述
建造者/生成器模式是一步步构造一个复杂的产品,最终通过类似GetResult()的方法得到最终产品。而抽象工厂是立即返回一个系列的多个简单的产品对象,在外部构建成一个复杂的产品对象。所以Builder模式不会向外暴露出很多产品类,而只要向外提供最终的复杂产品类即可。
4.实例代码
4.1 对外接口,给客户Client使用
// 一个复杂的产品
class Product
{
public:
virtual ~Product(){}
};
// 建造者
class Builder
{
public:
Builder() {}
virtual ~Builder(){}
virtual void BuildPartA() {}
virtual void BuildPartB() {}
virtual void BuildPartC() {}
};
// 导向器
class Director
{
Builder _builder;
public:
Director( Builder&builder )
:_builder(builder){}
virtual ~Director(){}
virtual void Construct()
{
_builder.BuildPartA();
_builder.BuildPartB();
_builder.BuildPartC();
}
};
4.2 客户Client程序
实现一个具体的Builder
class ConcreteBuilder: public Builder
{
Product* _product;
public:
ConcreteBuilder() {}
~ConcreteBuilder() {}
void BuildPartA(){ /*The first step*/ }
void BuildPartB(){ /*The second step*/ }
void BuildPartC(){ /*The third step*/ }
Product* GetResult(){ return _product;}
};
int main()
{
// new ConcreteBuilder
ConcreteBuilder builder;
// new Director
Director director(builder);
// Construct
director.Construct();
// Get result
builder.GetResult();
}