设计模式实现(九)--- 建造者模式(Builder)

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们需要应用一个设计模式,“建造者模式(Builder)”,又叫生成器模式。
建造者模式可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

如果我们用了建造者模式,那么用户就只需指定需要建造的类型可以得到它们,而具体建造的过程和细节就不需要知道了。


建造者模式实例

#include <string>
#include <iostream>
using namespace std;

//Product类---产品类,由多个部件组成
class Product
{
public:
	string part1,part2;
public:
	void show()
	{
		cout << part1 << endl;
		cout << part2 << endl;
	}

};

//Builder类---抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult();
class Builder
{
public:
	virtual void SetPart1(string part1) = 0;	//此处用虚函数,如果该类的子类没有对着两个类进行实现的话,则会出现编译错误。也就是起到了抽象类的作用
	virtual void SetPart2(string part2) = 0;
	virtual Product &getResult() = 0;
};
//ConcreteBuilder1类---具体建造者类
class ConcreteBuilder1 : public Builder
{
public:
	Product product;
public:
	void SetPart1(string part1)
	{
		product.part1 = "具体类1--方法1";
	}
	void SetPart2(string part2)
	{
		product.part2 = "具体类1--方法2";
	}
	Product &getResult()
	{
		return product;
	}
};

class ConcreteBuilder2 : public Builder
{
public:
	Product product;
public:
	void SetPart1(string part1)
	{
		product.part1 = "具体类2--方法1";
	}
	void SetPart2(string part2)
	{
		product.part2 = "具体类2--方法2";
	}
	Product &getResult()
	{
		return product;
	}
};
//Director类---指挥者类
class Director
{
public:
	void Construct(Builder &builder)
	{
		builder.SetPart1("111");			//决定调用建造类中的哪些方法,可以选择都进行调用(比如创建人的头、躯干、四肢),或者部分调用(比如有些车可以飞(翅膀),有些车可以游(叶轮))
		builder.SetPart2("111");
	}
};
int main()
{
	Director director;
	Builder *b1 = new ConcreteBuilder1();
	Builder *b2 = new ConcreteBuilder2();

	director.Construct(*b1);
	Product p1 = b1->getResult();
	p1.show();

	director.Construct(*b2);
	Product p2 = b2->getResult();
	p2.show();

	return 1;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值