建造者模式

来源:互联网 发布:淘宝宝贝评分查询 编辑:程序博客网 时间:2024/05/16 17:44
      建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
      建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们使用了建造者模式,那么用户就只需指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。

Product就是具体产品类,由多个部件组成。
Builder是为创建一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder是具体的建造者,实现Builder的接口,构造和装配各个部件。
指挥者Director就是根据需求的具体建造步骤。

建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

代码:
//Builder.h
#include "stdafx.h"#include <iostream>#include <string>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;}



0 0
原创粉丝点击