设计模式—建造者模式

1. 建造者模式的由来

    在构建一个复杂对象的时候,经常会有这种情况:该对象是由各个部分的子对象按照一定的步骤或者算法构成。这些子对象也许会经常变化,但它们组合的方式却不变。

    以建造小人为例,尽管建造出的小人各不相同,有大有小,有高有低,但都是按照一个流程进行的。头-》身体-》左右手-》左右脚。建造者模式与此类似,在向导的指导下一步一步完成产品的建造。

2. 类图表示

 

   

3. 实现示例代码

//建造者模式
#include <iostream>
#include <string>
using namespace std;

//产品类
class Product
{
private:
	string partA;	//产品的组件A
	string partB;	//组件B
public:
	Product(){}
	//添加组件A
	void addPartA(string pa)
	{
		this->partA=pa;
	}

	//添加组件B
	void addPartB(string pb)
	{
		this->partB=pb;
	}

	//显示产品
	void show()
	{
		cout<<"PartA:"<<partA<<endl;
		cout<<"PartB: "<<partB<<endl;
	}
};

//Builder接口
class Builder
{
public:
	virtual void buildPartA()=0;//组装A组件
	virtual void buildPartB()=0;//组装B组件
	virtual Product* getProduct()=0;//返回产品
};

//产品1的Builder,实现Builder接口
class Builder1:public Builder
{
private:
	//包含一个产品对象(数据成员)
	Product *pro;
public:
	Builder1()
	{
		pro=new Product;
	}
	void buildPartA()
	{
		pro->addPartA("产品1的A组件");
	}
	void buildPartB()
	{
		pro->addPartB("产品1的B组件");
	}
	Product* getProduct()
	{
		return pro;
	}
};

//产品2的Builder,实现Builder接口
class Builder2:public Builder
{
private:
	//包含一个产品对象(数据成员)
	Product *pro;
public:
	Builder2()
	{
		pro=new Product;
	}
	void buildPartA()
	{
		pro->addPartA("产品2的A组件");
	}
	void buildPartB()
	{
		pro->addPartB("产品2的B组件");
	}
	Product* getProduct()
	{
		return pro;
	}
};

//指挥者,负责指挥产品的组建
class Director
{
public:
	void construct(Builder* bu)
	{
		bu->buildPartA();
		bu->buildPartB();
	}
};

int main()
{
	//创建一个指挥者
	Director dir;
	Builder1* bu1=new Builder1;
	dir.construct(bu1);
	Product* pro1=bu1->getProduct();
	pro1->show();

	return 0;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章