策略模式【Strategy Pattern】
来源:互联网 发布:c语言返回值什么意思 编辑:程序博客网 时间:2024/05/17 23:33
在软件开发过程中有这样一种场景.假设,我们公司的业务人员去实勘房源(检测用户发布的房子是否师真的),如果一个月实勘了十套以上,五十套一下的N套房源则奖励该业务员(1*N + 10)个积分,十套一下奖励(1*N)个积分。五十套以上奖励(1*N+25)个积分。这些积分可都是钱啊!这些算法规则都是暂时也许下一个版本就变了,这都是需求的锅。
一种场景对应一种解决方式。策略模式,他定义了算法族,分别封装起来,让他们之间可以唔想替换,此模式让算法的变化,不会影响到算法客户(大话设计模式)。
public interface Ialgorithm { //算法内容 int algorithmAction();}/** * 算法管理类 * Created by dushiguang on 16/9/19. */public class AlgorithmContext { Ialgorithm mIalgorithm; public AlgorithmContext(Ialgorithm mIalgorithm) { this.mIalgorithm = mIalgorithm; } public int ContextInterface() { return mIalgorithm.algorithmAction(); }}/** * 实勘数小于10的算法 */public class AlgorithmLose10 implements Ialgorithm { private int num; public AlgorithmLose10(int num) { this.num = num; } @Override public int algorithmAction() { System.out.print("小于10的算法"); return num; }}/** * 实勘数小于10大于50的算法 */public class AlgorithmMore10 implements Ialgorithm { private int num; public AlgorithmMore10(int num) { this.num = num; } @Override public int algorithmAction() { System.out.print("大于10小于50的算法"); num = num + 10; return num; }}** * 实勘数大于50的算法 */public class AlgorithmMore50 implements Ialgorithm { private int num; public AlgorithmMore50(int num) { this.num = num; } @Override public int algorithmAction() { System.out.print("大于50的算法"); num = num + 25; return num; }}/** * 使用者类 */public class MainAction { private AlgorithmContext mAlgorithmContext; private int num; /** * * @param tag 根据参数选择相应的算法 */ private void acticon(int tag) { if(tag < 10 && tag > 0) { mAlgorithmContext = new AlgorithmContext(new AlgorithmLose10(tag)); num = mAlgorithmContext.ContextInterface(); } else if (tag > 10 && tag < 50) { mAlgorithmContext = new AlgorithmContext(new AlgorithmMore10(tag)); num = mAlgorithmContext.ContextInterface(); } else if(tag > 50) { mAlgorithmContext = new AlgorithmContext(new AlgorithmMore50(tag)); num = mAlgorithmContext.ContextInterface(); } System.out.print("---" + num); }}
这样可扩展性(OPC)就大大增加了,增加相应的算法类,修改选择添加即可。另外,策略模式和工厂模式结合起来可以更加降低耦合性。
PS:对于设计模式我只是作为学习笔记来写的,并非网上大牛们的手笔,所以各位看官看看就行,有错误请多多指正,要真正学习设计模式,书籍有,《大话设计模式》,这个需要C++语言底子,《您的设计模式》这个讲解的很有风趣,没有《大话设计模式》讲解的深,还有一本《Head First 设计模式》也讲解的蛮有意思的。
0 0
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- 策略模式 Strategy Pattern
- 策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)
- Strategy Pattern (策略模式)
- 策略模式 Strategy Pattern
- 策略模式【Strategy Pattern】
- 策略模式(Strategy Pattern)
- Strategy Pattern(策略模式)
- 策略模式(STRATEGY PATTERN )
- 策略模式(Strategy Pattern)
- 策略模式Strategy Pattern
- 策略模式(Strategy Pattern)
- 策略模式【Strategy Pattern】
- 策略模式【Strategy Pattern】
- 策略模式Strategy Pattern
- Strategy Pattern策略模式
- xUtils源码阅读(3)-ImageManagerImpl
- Hibernate的核心API
- 8月房价上涨城市数量增多 涨幅全线扩大
- Linux ALSA声卡驱动之一:ALSA架构简介
- Java之多线程锁
- 策略模式【Strategy Pattern】
- 关于flask中文件下载的实例
- ARP协议解析
- JS加PHP动态倒计时(定时器)
- 再论EM算法的收敛性和K-Means的收敛性
- flv文件格式解析
- C#正则表达式
- NHibernate实践之----事务
- pdf转jpg的在线与用转换器的转换方法