大话设计模式C++版——建造者模式
2015-06-28 12:28
337 查看
日常做菜的过程中,经常会有忘记放盐或者放2次盐的经历,最后导致好好的一盘菜让大家无从下口。这个时候就需要用到建造者模式来规范炒菜的过程,来保证每一道菜都会经历加油、放食物、放盐、放味精这4道基本的工序,同时保证每道工序不会重复。
1、炒菜基类
2、炒肉类,继承并实现CCook的每一道工序
3、实现示例
运行结果如下:
我们在开发过程中经常会碰到一种情况,一个类实现了一组底层的基本功能,但实现一个高级功能时需要把某些基本功能组合起来调用,这时采用建造者模式就能保证调用过程顺序一致且无遗漏,同时调用者调用也很简单(如炒菜就只需调用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(); }
运行结果如下:
我们在开发过程中经常会碰到一种情况,一个类实现了一组底层的基本功能,但实现一个高级功能时需要把某些基本功能组合起来调用,这时采用建造者模式就能保证调用过程顺序一致且无遗漏,同时调用者调用也很简单(如炒菜就只需调用Cook()函数即可,而不用去关心每一个具体细节)。
相关文章推荐
- Double-Checked Locking is Fixed In C++11
- C语言中~的用法
- 用递归方法求n阶勒让德多项式的值
- Hanoi(汉诺塔)问题。
- C++ and the Perils of Double-Checked Locking: Part II
- 编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。不用strcpy函数。
- 编一程序,将两个字符串连接起来,不要用strcat函数。
- 【设计模式】C++中的单例模式
- 有一行电文,已按下面规律译成密码
- c语言常见函数自编写
- 有一篇文章,共有3行文字,每行有10个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格及其它字符的个数
- C/C++ sort函数的用法
- 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
- 将一个数组中的值按逆序重新存放。
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
- Eclipse+CDT+MinGw进行C&C++开发
- 文章标题
- C++ MPICH
- C++学习备忘录=>持续更新
- C++继承、虚继承、虚函数类的大小问题