策略模式
来源:互联网 发布:抗日知乎 编辑:程序博客网 时间:2024/06/05 14:07
例子:商场促销------策略模式
基本需求:就是计算收银,通过单价*数量
增加需求:遇到活动,会打折
小菜的代码问题:1)分支语句过多2)无法应对新的需求即满300赠100,满300返100,、8折、7折、原价
收获:面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是
抽象,具有相同属性和功能对象的抽象集合才是类。
因此策略模式的最后结果是
屏幕剪辑的捕获时间: 2013/5/12 16:53
其实有上面那么多的打折需求,现在只变成了3个类,可以理解为在纷繁复杂的世界
中对对象又进一步提取为一个类。
下面一一解释一下:
现金收费抽象类
功能:收取现金
正常收费类
功能:原价返回
打折收费子类:
功能:通过动态的输入参数的方法,打折的折扣率,再计算原价
返利收费子类:
功能:通过初始化的时候设置两个参数,(返利条件,返利值),计算收取现金
现金收费工厂类:
功能:根据条件返回相应的对象。
客户端程序:实例化简单工厂
新问题:1)每次维护或拓展收费方式都要改动这个工厂,以致代码需要重新编译,是很糟糕的处理方式。
闪亮登场:策略模式
定义:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
封装变化点就是我们面向对象的一种很重要的思维方式。
代码结构图
屏幕剪辑的捕获时间: 2013/5/12 17:12
解释:
CashSuper类:
功能:定义所有支持的算法的公共接口
Cash Contex类:
功能:1)通过通过初始化的时候,传入具体的策略,决定用哪一个算法;
2)通过具体的策略对象,调用其算法.
其实以上的本质恰恰是:封装了变化,用传递参数的方法,取代了case,实在是
一个高明的策略。
反思:
应用条件:
只要在分析过程中听到需要不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
概念上讲:
算法完成相同的工作,只是实现不同,他可以以相同的方式调用所有的算法。
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- Flex : HTTPService 请求加载权限还是之前登录人的权限
- 输出括号所有合法匹配-sohu产品技术训练营笔试题-2013年5月12日
- 快速排序非递归实现
- 各种字符串Hash函数比较
- Deep learning:十八(关于随机采样)
- 策略模式
- EM_EXSETSEL
- TCP/IP
- EM_REPLACESEL message
- 两种写法,为什么第二种就总崩溃呢
- centos 6 升级gcc
- 图像特征点匹配之两幅图像中的对应关键点连线
- 快速排序法之一
- sip info 方法 发起 h264关键帧请求