设计模式C++版:第四式建造者模式

开始建造者模式之前,我们先提出使用建造者模式的使用场景——有一个复杂对象需要构建,且构建过程是稳定的,这个时候我们可以考虑建造者模式。比如创建四边形,我们可以设定一个画图方式——顺时针画图。也就是说先画上面的一条边,再画右边的边,接着画下面的边,最后画左边的边。这个构造过程是稳定的。其实无论是顺时针还是逆时针或者是交叉画,一旦确定下来规则,整个构造过程就是稳定的了。当然你不能画三条边或者六条边,因为一旦你话的边的数量变化了,你构造的对象也就不再是所需要的对象了。所以说使用建造者模式的重点在于,建造者的过程是稳定的。如果一个对象的创建过程不稳定,或者说具有很大的灵活性,那时我们需要考虑设计模式的另一个招式——装饰者模式。

下面是关于建造者模式的示例:

#include <iostream>
class Builder
{
public:
	
	virtual ~Builder(){ }

	virtual void buidehead(){}

	virtual void buidebody(){}

	virtual void buidearms(){}
	
	virtual void buidelegs(){}
};


class  FatBuilder :public Builder
{
public:
	virtual void buidehead()
	{
		printf("建造肥大的头部!\n");
	}

	virtual void buidebody()
	{
		printf("建造肥大的躯体!\n");
	}

	virtual void buidearms()
	{
		printf("建造肥大的胳膊!\n");
	}

	virtual void buidelegs()
	{
		printf("建造肥大的腿部!\n");
	}
};

class  ThinBuilder :public Builder
{
public:
	virtual void buidehead()
	{
		printf("建造消瘦的头部!\n");
	}

	virtual void buidebody()
	{
		printf("建造消瘦的躯体!\n");
	}

	virtual void buidearms()
	{
		printf("建造消瘦的胳膊!\n");
	}

	virtual void buidelegs()
	{
		printf("建造消瘦的腿部!\n");
	}
};

//用户直接和Director --- 指挥者打交道 创建人
class Driector
{
public:
	Driector(Builder*builder) :m_builder(builder){}

	void createperson()
	{
		m_builder->buidehead();
		m_builder->buidebody();
		m_builder->buidearms();
		m_builder->buidelegs();
	}
private:
	Builder * m_builder;
};

int main()
{
	Builder *builder = new ThinBuilder;
	//Builder *builderfat = new FatBuilder;
	Driector directorthin(builder);
	directorthin.createperson();
	delete builder;

	builder = new FatBuilder;
	Driector directorfat(builder);
	directorfat.createperson();
	delete builder;
	return 0;
}

 
 
 
建造者模式的优点就是我们把建造的过程和它的表示分离,也就是说同样的建造过程可以创建不同的表示,得到不同的具体对象。其实也就是我们在创建过程之上又抽象了一层。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值