设计模式—建造者模式

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值