使用场景
隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果
多个部件都可以装配到一个对象中,但产生的运行结果不相同
产品类非常复杂或者产品类因为调用顺序不同而产生不同作用
初始化一个对象时,参数过多,或者很多参数具有默认值
Builder模式不适合创建差异性很大的产品类
产品内部变化复杂,会导致需要定义很多具体建造者类实现变化,增加项目中类的数量,增加系统的理解难度和运行成本
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
#include<iostream>
#include<string>
using namespace std;
class ProductPart;
class Product
{
public:
Product() { /* ProductPart::BuildPart();*/ cout << "return a product" << endl; }
~Product() { }
void ProducePart() { cout << "build part of product." << endl; }
protected:
private:
};
/*
class ProductPart
{
public:
ProductPart() {}
~ProductPart() {}
ProductPart* BuildPart() { return new ProductPart; }
protected:
private:
};*/
class Builder
{
public:
virtual ~Builder() {}
virtual void BuildPartA(const string& buildPara) = 0;
virtual void BuildPartB(const string& buildPara) = 0;
virtual void BuildPartC(const string& buildPara) = 0;
virtual Product* GetProduct() = 0;
protected:
Builder() {}
private:
};
class ConcreteBuilder : public Builder
{
public:
ConcreteBuilder() {}
~ConcreteBuilder() {}
void BuildPartA(const string& buildPara) { cout << "Step1:Build PartA..." << buildPara << endl; }
void BuildPartB(const string& buildPara) { cout << "Step1:Build PartB..." << buildPara << endl; }
void BuildPartC(const string& buildPara) { cout << "Step1:Build PartC..." << buildPara << endl; }
Product* GetProduct()
{
BuildPartA("pre-defined");
BuildPartB("pre-defined");
BuildPartC("pre-defined");
return new Product();
}
protected:
private:
};
class Director
{
public:
Director(Builder* bld) { _bld = bld; }
~Director() {}
void Construct()
{
_bld->GetProduct()->ProducePart();
}
protected:
private:
Builder* _bld;
};
int main(int argc, char* argv[])
{
Director* d = new Director(new ConcreteBuilder());
d->Construct();
return 0;
}
0 评论