构造型设计模式--建造者模式

建造者模式

定义:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

使用场景:当一个类的构造函数参数个数超过四个,而这些参数有些是可选参数,考虑使用建造者模式。

项目例子

假设有一个程序需要画一个小人,包括头、身体、两手、两脚构成即可。可以创建一个类表示该小人:

class people{

	people(){
		//创建头
		//创建身体
		//创建双手
		//创建双腿
	}

};

但是当需求增加时,譬如,需要创建一个胖子、瘦子、高个、矮个时,其各个部分的构造函数需要适应性改变,如果各种人都创建一个类时,容易出现编程错误,譬如,某个类缺少某个创建过程了。
此时,需要将创建过程抽象出来,不能让任何人遗忘某一过程的创建。

//PeopleBuilder.h
#pragma once

class PeopleBulider{
public:
	virtual void setHead() = 0;
	virtual void setBody() = 0;
	virtual void setHands() = 0;
	virtual void setLegs() = 0;

}

如上为“Builder”角色。

如果想要构造一个“瘦子”的角色,则继承上述即可。

//ThinPeopleBuilder.h
#pragma once
#include "PeopleBulider.h"
class ThinPeopleBulider :public PeopleBulider
{
public:
	ThinPeopleBulider(void);
	~ThinPeopleBulider(void);


	void setHead();
	void setBody();
	void setHands();
	void setLegs();
};
//ThinPeopleBuilder.cpp
#include "StdAfx.h"
#include "ThinPeopleBulider.h"

ThinPeopleBulider::ThinPeopleBulider(void)
{
}

ThinPeopleBulider::~ThinPeopleBulider(void)
{
}

void ThinPeopleBulider::setHead()
{
	//瘦子
}
void ThinPeopleBulider::setBody()
{
	//瘦子
}
void ThinPeopleBulider::setHands()
{
	//瘦子
}
void ThinPeopleBulider::setLegs()
{
	//瘦子
}

如上为“ConcreteBuilder”角色。

此时,可以构建一个类,用来组装人物:

//Director.h
#pragma once

#include "PeopleBulider.h"
class Director
{
public:
	Director(PeopleBulider *);
	~Director(void);

	void Construct();

private:
	PeopleBulider *_bld;
};

//Director.cpp
#include "StdAfx.h"
#include "Director.h"


Director::Director(PeopleBulider *p)
{
	_bld = p;
}
Director::~Director(void)
{

}
void Director::Construct()
{
	_bld->setHead();
	_bld->setBody();
	_bld->setHands();
	_bld->setLegs();
}

如上为“Director”角色。

而最终使用方式为:

// BuilderTest.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include "Director.h"
#include"ThinPeopleBulider.h"

int _tmain(int argc, _TCHAR* argv[])
{

	ThinPeopleBulider *t_thinPeople = new ThinPeopleBulider();
	Director t_director(t_thinPeople);
	t_director.Construct();


	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值