定义:将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的角色包括:
builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这些接口规定,具体要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
ConcreteBuilder:实现Builder接口,根据不同的商业逻辑,具体化复杂对象的各部分创建。在建造过程完整后,提供产品的实例。
Director:调用具体建造者来创建复杂对象的各部分,在指导中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
Product:要创建的复杂对象。
先看一段代码:
//Product类
class Product{
vector<string> parts;
public:
void Add(const string part)
{
parts.push_back(part);
}
void Show() const
{
for(int i = 0; i < parts.size(); ++i)
{
cout << parts[i] << endl;
}
}
};
class Builder
{
public:
virtual void BuildHead() = 0;
virtual void BuildBody() = 0;
virtual void BuildHand() = 0;
virtual Product GetResult() = 0;
}
//具体胖人创建类
class FatPersonBuilder: public Builder{
private:
Product product;
public:
virtual void BuildHead()
{
product.Add("胖人人头");
}
virtual