Builder模式:将一个复杂对象的构建与它的表示相分离.使得同样的构建过程可以创建不同的表示.一般情况下,且对象不是直接返回的...
定义:
先定义一个要构建的类:
class Product
{
public:
Product();
~Product();
void ProducePart();
};
class ProductPart//定义组成Product的部分.
{
ProductPart();
~ProductPart();
ProducePart *BuildPart();
};
然后创建一个Builder抽象类.
class builder
{
public:
~builder();
virtual void ProducePartA(部分一);
virtual void ProducePartB(部分二);
virtual void ProducePartC(部分三);
...
virtual Product * GetProduct()=0;
protected: //在主函数中一般不直接构造实例....比如:builder *p=new builder..
Builder();
private:
};
3.定义一个生产具体对象的子builder
class childBuilder:public builder
{
public:
childBuilder();
~childBuilder();
void BuildPartA(); /*****buildPartX()---start*********/
生产过程
.... /*****buildPartX()---end*********/
Product *GetProduct(); //返回生成的实例.....
};
4 定义一个类来实现某一产品对象的构造过程
class con
{
public:
Director(builder *bldr);
~Director();
void produce() //构造产品.
{
BuildPartA();
BuildPartB();
.....
}
protected;
private:
Builder *_bldr;//通过_bldr来调用生产过程,完成对象的实现过程.
};
总结及讨论:builder模式似乎注重构建的过程,不需要返回构建的产品.如果想返回产品的话,可以在con中添加一个Product的指针.然后将该指针作为buildPart函数的参数..来完成product的构建,然后添加一个返回product的指针的函数得到该product.
或者在childbuilder中添加一个属性,为product *类型.然后通过GetProduct()得到该Prodcut.