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(); }运行结果如下:
原文地址:http://blog.csdn.net/gufeng99/article/details/46670629