日常做菜的过程中,常常会有忘记放盐或者放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();}执行结果例如以下: 我们在开发过程中常常会碰到一种情况,一个类实现了一组底层的基本功能,但实现一个高级功能时须要把某些基本功能组合起来调用,这时採用建造者模式就能保证调用过程顺序一致且无遗漏,同一时候调用者调用也非常easy(如炒菜就仅仅需调用Cook()函数就可以,而不用去关心每个详细细节)。