设计模式
vector6_
linux c++/java
展开
-
使用策略模式和工厂方法改进if-else的实现
使用策略模式和工厂方法改进if-else的实现假设我们要做一个外卖平台,有这样的需求:1、外卖平台上的某家店铺为了促销,设置了多种会员优惠,其中包含超级会员折扣8折、普通会员折扣9折和普通用户没有折扣三种。2、希望用户在付款的时候,根据用户的会员等级,就可以知道用户符合哪种折扣策略,进而进行打折,计算出应付金额。3、随着业务发展,新的需求要求专属会员要在店铺下单金额大于30元的时候才可以享受优惠。4、接着,又有一个变态的需求,如果用户的超级会员已经到期了,并且到期时间在一周内,那么就对用户的单笔订原创 2020-11-16 22:36:30 · 157 阅读 · 0 评论 -
使用c++11改进设计模式——命令模式
命令模式/* 命令模式的问题在于随着请求的增多,封装请求的命令类也会越来越多, 导致类膨胀难以管理。 要解决命令模式类爆炸的问题,关键是定义通用的泛化的命令类,这个命令类 可以泛化所有的命令。 定义函数包装器,可以接受所有的可调用对象(函数对象、function、lambda)*/#include<functional>#include<type_traits>template<typename R = void>class Command{p原创 2020-10-24 23:57:03 · 170 阅读 · 1 评论 -
使用c++11改进设计模式——观察者模式
观察者模式/* * 传统观察者模式的缺点:1)需要继承(强对象关系),不够灵活 * 2)观察者被通知的接口参数不支持变化* 改进:1)通过被通知接口参数化和std::function来代替继承;* 2)通过可变参数模板和完美转发来消除接口变化产生的影响。* ***/#include<functional>#include<unordered_map>#include<string>using namespace std;class No原创 2020-10-24 23:51:39 · 273 阅读 · 0 评论 -
使用c++11改进设计模式——单例模式
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2020-10-23 22:08:47 · 194 阅读 · 1 评论