设计模式之策略模式(strategy)
来源:互联网 发布:云计算培训视频 编辑:程序博客网 时间:2024/04/29 20:30
策略模式(strategy)
策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。
关系图如下:
图中ICalculator提供计算的方法,
AbstractCalculator是辅助类,提供辅助方法,接下来,依次实现下每个类:
首先统一接口:
public interface ICalculator { public int calculate(String exp); }
辅助类:
public abstract class AbstractCalculator { public int[] split(String exp,String opt){ String array[] = exp.split(opt); int arrayInt[] = new int[2]; arrayInt[0] = Integer.parseInt(array[0]); arrayInt[1] = Integer.parseInt(array[1]); return arrayInt; } }
三个实现类:
public class Plus extends AbstractCalculator implements ICalculator { @Override public int calculate(String exp) { int arrayInt[] = split(exp,"\\+"); return arrayInt[0]+arrayInt[1]; } }
public class Minus extends AbstractCalculator implements ICalculator { @Override public int calculate(String exp) { int arrayInt[] = split(exp,"-"); return arrayInt[0]-arrayInt[1]; } }
public class Multiply extends AbstractCalculator implements ICalculator { @Override public int calculate(String exp) { int arrayInt[] = split(exp,"\\*"); return arrayInt[0]*arrayInt[1]; } }
简单的测试类:
public class StrategyTest { public static void main(String[] args) { String exp = "2+8"; ICalculator cal = new Plus(); int result = cal.calculate(exp); System.out.println(result); } }
输出: 10
策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。
阅读全文
0 0
- 【设计模式】之策略模式(Strategy)
- 设计模式之--策略模式(Strategy)
- 设计模式之策略(strategy)模式
- 设计模式之策略模式(Strategy)
- 设计模式之策略模式(Strategy)
- 设计模式之:策略模式(strategy)
- 设计模式之策略(Strategy)模式
- 设计模式之策略模式(strategy)
- 设计模式之策略模式(STRATEGY)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- Jmeter自定义脚本实例(以项目中阿里云上传接口为例子的需求分析以及实现)
- OFDM 中的 IFFT/FFT 注意事项
- html5 移动端的手指触屏事件
- 技巧笔记:Algin属性设置顺序问题
- GridView(1)+包管理区获取已经安装程序
- 设计模式之策略模式(strategy)
- jQuery<5.4>
- 1150: [CTSC2007]数据备份Backup
- [LeetCode]Group Anagrams
- 剑指offer——数组中出现次数超过一半的数字_(待写最优法分治)
- 多天线技术MIMO.md
- 【记录】MYSQL数据库5.7.18版免安装版window配置方法
- JaveScript之关于时间
- Java八大排序算法之"直接插入排序"算法