前两天领导提出问题说要用设计模式代替多个if else分支的情况,当时自己的第一反应是责任链模式(当时也有人回答责任联模式,回头想想好像从某种方面来说也没什么问题,责任链模式本来就是从第一责任诸个判断和if else好像完全匹配。。。。剩下的一会儿再说),但最后给出来的答案是策略模式。
先啰嗦两句策略模式和责任链模式的选择,责任链的问题貌似就是纠结在了逐个判断操作上,如果责任链很长的话对系统的性能消耗比较大,而策略模式则可以直接分配到具体的方法执行。后来自己也查询了一些博客等资料,策略模式好像也不是适应所有的if else(毕竟写个设计模式也是很麻烦的有时候确实不必要。。),策略模式一般都是使用在不同策略(不同if else 方法体内容)比较复杂或者要执行不同操作等,分别需要大段代码的情况。
总结:一般在分支操作比较复杂的情况下, 策略模式+工厂模式 结合使用(下面是自己写的练习例子)
1.先写一个策略接口,后面所有策略要实现他
package study.strategy;
/**
* 策略接口
* @author dell
*
*/
public interface Strategy {
//执行的方法,由于java中方法的执行,对象会根据具体类型执行对应子类的方法,所以实际实现中会执行对应子类的方法(自认为这个原理是策略模式的根本)
public void operate();
}
2.编写具体策略类,具体策略中实现接口的方法,写出具体策略方案
package stu