策略模式
来源:互联网 发布:oracle数据脱敏处理 编辑:程序博客网 时间:2024/06/07 03:20
策略模式
定义
- 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换
优点
- 算法可以自由切换
- 避免使用多重条件判断
- 扩展性良好
缺点
- 策略类会增多
- 所有策略类都需要对外暴露
注意项
- 如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题
第一步
- 方法接口(AllMethod.java)
public interface AllMethod { public int doSomething(int first,int second);}
第二步
- 加,减,乘方法(AddMethod.java、SubstractMethod.java、MultiplyMethod.java)
public class AddMethod implements AllMethod { @Override public int doSomething(int first, int second) { return first + second; }}
public class SubstractMethod implements AllMethod { @Override public int doSomething(int first, int second) { return first - second; }}
public class MultiplyMethod implements AllMethod { @Override public int doSomething(int first, int second) { return first * second; }}
第三步
- 包装策略的类(Method.java)
public class Method { private AllMethod allMehod; public AllMethod getAllMehod() { return allMehod; } public void setAllMehod(AllMethod allMehod) { this.allMehod = allMehod; } public int doMethod(int first,int second) { if (allMehod != null) { return allMehod.doSomething(first, second); } return 0; }}
第四步
- 测试Demo(StrategyDemo.java)
public class StrategyDemo { public static void main(String[] args) { AddMethod addMethod = new AddMethod(); SubstractMethod substractMethod = new SubstractMethod(); MultiplyMethod multiplyMethod = new MultiplyMethod(); Method method = new Method(); method.setAllMehod(addMethod); int add = method.doMethod(1, 2); method.setAllMehod(substractMethod); int substract = method.doMethod(1, 2); method.setAllMehod(multiplyMethod); int multiply = method.doMethod(1, 2); System.out.println("add:" + add); System.out.println("substract:" + substract); System.out.println("multiply:" + multiply); }}
第五步
- 收获结果
add:3substract:-1multiply:2
阅读全文
0 0
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- extJS 4.2 自定义分页
- opencv for python (1) 图像读取、显示、保存
- freemarker调试遇到的问题备忘
- 人工智能的伦理和价值观——阿西洛马人工智能原则(Asilomar AI Principles )
- freemarker导出PDF
- 策略模式
- 如何调试Android Framework?
- JQuery 入门介绍
- 自定义view——坐标系问题
- caffe python接口:参数及特征提取
- cocos2d-x 控制台输出日志
- Python查看文件编码格式
- laravel auth 登录
- Hadoop运维问题