日常做菜的过程中,经常会有忘记放盐或者放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()函数即可,而不用去关心每一个具体细节)。
本文为博主原创文章,如需转载请说明转至http://www.cnblogs.com/organic/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架