Java设计模式-策略模式(strategy)
2024-08-27 09:22:50
策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下:
图中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
策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。
最新文章
- 遍历dynamic的方式
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
- 简例 一次执行多条mysql insert语句
- Android OpenCV 图像识别
- C++中的句柄类
- 最短路径 dijkstra
- 抛掉kendoUI的MultiSelect,自己实现 DropDownList MultiSelect
- Jquery-获取勾选的checkbox的同级节点数量
- (简单) LightOJ 1074 Extended Traffic,SPFA+负环。
- linux服务配置
- 用宏定义代替printf函数
- 点赞功能与redis的相遇
- Groovy 设计模式 -- 借贷
- Python多进程库multiprocessing中进程池Pool类的使用
- linux 修改密码命令
- 在ASP.NET MVC下扩展一个带验证的RadioButtonList
- 路由器实操 能够登陆QQ 收发信息正常 但游览器无法连接网页
- C#之Lambda不得不说的用法
- MySql——触发器
- End to End Sequence Labeling via Bidirectional LSTM-CNNs-CRF论文小结
热门文章
- 通过CDC获取 HDC
- [转载]ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件
- Google三驾马车
- HOJ 1640 Mobile Phone
- sublime配置全攻略
- ArcGIS Engine 中 Geometric Network 显示流向代码
- Linux下squid代理缓存服务环境部署
- google project tango 学习笔记
- 发发关于JavaScript的感慨,随手记几个js知识碎片
- windows 7 安装 scrapy