建造者模式

2014-11-23 19:32:17 · 作者: · 浏览: 14
建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们使用了建造者模式,那么用户就只需指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。 \
Product就是具体产品类,由多个部件组成。 Builder是为创建一个Product对象的各个部件指定的抽象接口。 ConcreteBuilder是具体的建造者,实现Builder的接口,构造和装配各个部件。 指挥者Director就是根据需求的具体建造步骤。
建造者模式的好处< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPr7NysfKubXDvajU7LT6wuvT67Htyr60+sLrt9bA66Os08nT2r2o1OzV39L+stjBy7jDsvrGt8rHyOe6ztfp17C1xKOsy/nS1Mj00OjSqrjEseTSu7j2svrGt7XExNqyv7Htyr6jrNa70OjSqtTZtqjS5dK7uPa+38zltcS9qNTs1d++zb/J0tTBy6GjCjxicj4KCjxzdHJvbmc+tPrC66O6PC9zdHJvbmc+Ci8vQnVpbGRlci5oCjxwcmUgY2xhc3M9"brush:java;">#include "stdafx.h" #include #include using namespace std; class Product { private: std::string _partA; std::string _partB; std::string _partC; public: void SetPartA(const string& partA) { cout << "Product:A" << endl; _partA = partA; } void SetPartB(const string& partB) { cout << "Product:B" << endl; _partB = partB; } void SetPartC(const string& partC) { cout << "Product:C" << endl; _partC = partC; } }; class Builder { public: virtual void BuildPartA() = 0; virtual void BuildPartB() = 0; virtual void BuildPartC() = 0; virtual Product* GetProduct() = 0; Builder(){} virtual ~Builder(){} }; class ConcreteBuilder :public Builder { private: Product* _pProduct; public: ConcreteBuilder() :Builder() { _pProduct = new Product(); } ~ConcreteBuilder() { delete(_pProduct); _pProduct = NULL; } virtual void BuildPartA() { cout << "ConcreteBuilder:A" << endl; _pProduct->SetPartA("A"); } virtual void BuildPartB() { cout << "ConcreteBuilder:B" << endl; _pProduct->SetPartB("B"); } virtual void BuildPartC() { cout << "ConcreteBuilder:C" << endl; _pProduct->SetPartC("C"); } virtual Product* GetProduct() { return this->_pProduct; } }; class Director { private: Builder *_pBuilder; public: ~Director() { } Director(Builder* builder) { _pBuilder = builder; } void Construct() { _pBuilder->BuildPartA(); _pBuilder->BuildPartB(); _pBuilder->BuildPartC(); } };
// BuilderPattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Builder.h"


int _tmain(int argc, _TCHAR* argv[])
{
	Director *pDirector = new Director(new ConcreteBuilder());
	pDirector->Construct();

	getchar();
	return 0;
}