您的位置:首页 > 编程语言 > C语言/C++

大话设计模式C++版——建造者模式

2015-06-28 12:28 337 查看
日常做菜的过程中,经常会有忘记放盐或者放2次盐的经历,最后导致好好的一盘菜让大家无从下口。这个时候就需要用到建造者模式来规范炒菜的过程,来保证每一道菜都会经历加油、放食物、放盐、放味精这4道基本的工序,同时保证每道工序不会重复。

1、炒菜基类

class CCook
{
public:
CCook()	{}
virtual	~CCook() {}

//建造过程函数
//为了保证所有的子类能够按照指定顺序依次实现完整的建造过程,而不会忘记某一个过程的调用(如忘了放盐)
void	Cook()
{
PutFat();			//先放油
PutFood();			//再放食物
PutSalt();			//接着放盐
PutAginomoto();		//最后放味精
}

protected:
virtual	void PutFat() = 0;
virtual	void PutFood() = 0;
virtual	void PutSalt() = 0;
virtual	void PutAginomoto() = 0;
};

2、炒肉类,继承并实现CCook的每一道工序

class CCookMeat : public CCook
{
public:

private:
void PutFat()
{
printf("Please input 10 gram fat to the pen\n");
}

void PutFood()
{
printf("Please input 500 gram meat to the pen\n");
}

void PutSalt()
{
printf("Please input 2 gram salt to the pen\n");
}

void PutAginomoto()
{
printf("Please iput 1 gram aginomoto to the pen\n");
}
};

3、实现示例

void	Test()
{
CCookMeat	oCCookMeat;

oCCookMeat.Cook();
}

运行结果如下:



我们在开发过程中经常会碰到一种情况,一个类实现了一组底层的基本功能,但实现一个高级功能时需要把某些基本功能组合起来调用,这时采用建造者模式就能保证调用过程顺序一致且无遗漏,同时调用者调用也很简单(如炒菜就只需调用Cook()函数即可,而不用去关心每一个具体细节)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: