設計模式—建造者模式

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;
}


 

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