建造者模式C++实现

2014-11-24 07:30:22 · 作者: · 浏览: 0

最近自学了设计模式,发现好多书的java实现的。因为本人是从事C++开发的,因此想尝试用C++自己实现一遍,加深理解。

创建者模式

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用性:

1、 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时

2、 当构造过程必须运行被构造的对象有不同的表示时

结构类图:

\

实现:

class Product

{

public:

voidSetPartA(int val)

{

m_partA = val;

}

voidSetPartB(int val)

{

m_partB = val;

}

voidSetPartC(int val)

{

m_partC = val;

}

voidshowProperty()

{

cout<<"show product property :"<

cout<<"m_partA :"<

cout<<"m_partB :"<

cout<<"m_partC :"<

}

protected:

private:

intm_partA;

intm_partB;

intm_partC;

};

// Builder不把方法声明为纯虚函数,这使得客户只需重定义感兴趣的操作

class Builder

{

public:

virtual void CreateProduct() {};

virtual void SetPartA(intval) {};

virtual void SetPartB(intval){};

virtual void SetPartC(intval) {};

virtualProduct* GetProduct()

{

returnNULL;

};

};

class ConcreteBuilder:public Builder

{

public:

voidCreateProduct()

{

m_product = new Product;

}

voidSetPartA(int val)

{

cout<<"Build PartA"<

m_product->SetPartA(val);

}

voidSetPartB(int val)

{

cout<<"Build PartB"<

m_product->SetPartB(val);

}

voidSetPartC(int val)

{

cout<<"Build PartC"<

m_product->SetPartC(val);

}

Product* GetProduct()

{

returnm_product;

}

protected:

private:

Product *m_product;

};

class Director

{

public:

Director(Builder *buider)

{

m_pBuilder = buider;

}

voidConstruct()

{

if(!m_pBuilder)

{

return;

}

m_pBuilder->CreateProduct();

m_pBuilder->SetPartA(1);

m_pBuilder->SetPartB(2);

m_pBuilder->SetPartC(3);

}

protected:

private:

Builder *m_pBuilder;

};

Builder*pBuilder = new ConcreteBuilder;

Director *pDirector = new Director(pBuilder);

pDirector->Construct();

Product *product =pBuilder->GetProduct();

product->showProperty();