日常做菜的过程中,经常会有忘记放盐或者放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()函数即可,而不用去关心每一个具体细节)。

最新文章

  1. jquery 拖拽,框选的一点积累
  2. Serenity框架官方文档翻译(1-2开始、安装和界面)
  3. 二叉索引树BIT
  4. 【转】JAVA字符串格式化-String.format()的使用--不错
  5. "SOAP WebService " 和 "RESTful WebService" 的定义分别是什么???
  6. 一个读取C#特性Description方法
  7. 京东分布式缓存redis应用实战
  8. MacBook 经常使用快捷键
  9. selenium-java web自动化测试工具
  10. JavaMail API 概述
  11. vue 使用小结 2019.03
  12. 用django2.1开发公司官网(上)
  13. Python学习第十篇——函数初步
  14. 字符串哈希及KMP
  15. mysql常用的查询优化
  16. Mysql技能之【性能优化方案】
  17. java版本DbhelperMysql
  18. (转)base64编码是怎么工作的?
  19. 原生JS获取url汇总
  20. hdoj1180 诡异的楼梯(bfs+奇偶判断)

热门文章

  1. Material UI – Material Design CSS 框架
  2. VS2012 asp.net mvc 4 运行项目提示:"错误消息 401.2。: 未经授权: 服务器配置导致登录失败"
  3. Autodesk View and Data API练练手
  4. 腾讯bugly团队提供的android国内镜像
  5. RxJava 和 RxAndroid 四(RxBinding的使用)
  6. Android NDK之JNI陷阱
  7. mysql 数据库服务中的应用程序
  8. php页面静态化
  9. 软件开发与UML的关系
  10. Linux下NDK编译FFMPEG包含neon参数