日常做菜的过程中,常常会有忘记放盐或者放2次盐的经历。最后导致好好的一盘菜让大家无从下口。这个时候就须要用到建造者模式来规范炒菜的过程,来保证每一道菜都会经历加油、放食物、放盐、放味精这4道主要的工序。同一时候保证每道工序不会反复。
1、炒菜基类
我们在开发过程中常常会碰到一种情况,一个类实现了一组底层的基本功能,但实现一个高级功能时须要把某些基本功能组合起来调用,这时採用建造者模式就能保证调用过程顺序一致且无遗漏,同一时候调用者调用也非常easy(如炒菜就仅仅需调用Cook()函数就可以,而不用去关心每个详细细节)。
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();
}
执行结果例如以下:
我们在开发过程中常常会碰到一种情况,一个类实现了一组底层的基本功能,但实现一个高级功能时须要把某些基本功能组合起来调用,这时採用建造者模式就能保证调用过程顺序一致且无遗漏,同一时候调用者调用也非常easy(如炒菜就仅仅需调用Cook()函数就可以,而不用去关心每个详细细节)。