Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对
象,它们的区别是: Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说 Builder 模式中对象不是直接返回的。而在 AbstractFactory 模式中对象是直接返回的, AbstractFactory 模式强调的是为创建多个相互依赖的对象提供一个同一的接口。
#include <iostream>
#include <string>
using namespace std;
class Product
{
public:
Product()
{
ProducePart();
cout <<"return a product"<< endl;
}
void ProducePart()
{
cout <<"build part of product.."<< endl;
}
~Product(){}
};
class ProductPart
{
public:
ProductPart(){ cout << "build productpart..."<< endl;}
ProductPart *BuildPart()
{
return new ProductPart;
}
~ProductPart(){}
};
/*****************************************************/
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(){}
};
class ConcreateBuilder: public Builder
{
public:
ConcreateBuilder(){}
~ConcreateBuilder(){}
virtual void BuildPartA(const string &buildPara)
{
cout << "Step1:Build PartA..."<< buildPara << endl;
}
virtual void BuildPartB(const string &buildPara)
{
cout << "Step1:Build PartB..."<< buildPara << endl;
}
virtual void BuildPartC(const string &buildPara)
{
cout << "Step1:Build PartC..."<< buildPara << endl;
}
virtual Product *GetProduct()
{
BuildPartA("pre-defined");
BuildPartB("pre-defined");
BuildPartC("pre-defined");
return new Product();//产品完成
}
};
/***************************************************/
class Director
{
public:
Director(Builder* bld){ _bld = bld;}
~Director(){}
void Construct()
{
_bld->BuildPartA("user-defined");
_bld->BuildPartB("user-defined");
_bld->BuildPartC("user-defined");
}
private:
Builder *_bld;
};
int main()
{
Director *d = new Director(new ConcreateBuilder());
d->Construct();
return 0;
}