策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下:

图中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

策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

最新文章

  1. 遍历dynamic的方式
  2. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
  3. 简例 一次执行多条mysql insert语句
  4. Android OpenCV 图像识别
  5. C++中的句柄类
  6. 最短路径 dijkstra
  7. 抛掉kendoUI的MultiSelect,自己实现 DropDownList MultiSelect
  8. Jquery-获取勾选的checkbox的同级节点数量
  9. (简单) LightOJ 1074 Extended Traffic,SPFA+负环。
  10. linux服务配置
  11. 用宏定义代替printf函数
  12. 点赞功能与redis的相遇
  13. Groovy 设计模式 -- 借贷
  14. Python多进程库multiprocessing中进程池Pool类的使用
  15. linux 修改密码命令
  16. 在ASP.NET MVC下扩展一个带验证的RadioButtonList
  17. 路由器实操 能够登陆QQ 收发信息正常 但游览器无法连接网页
  18. C#之Lambda不得不说的用法
  19. MySql——触发器
  20. End to End Sequence Labeling via Bidirectional LSTM-CNNs-CRF论文小结

热门文章

  1. 通过CDC获取 HDC
  2. [转载]ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件
  3. Google三驾马车
  4. HOJ 1640 Mobile Phone
  5. sublime配置全攻略
  6. ArcGIS Engine 中 Geometric Network 显示流向代码
  7. Linux下squid代理缓存服务环境部署
  8. google project tango 学习笔记
  9. 发发关于JavaScript的感慨,随手记几个js知识碎片
  10. windows 7 安装 scrapy