行为型模式
该模式解决了什么问题?首先请看以下的代码片段。
public class Demo {
public String type(int i) {
if (i == 0) return "type1";
else if ((i == 1)) return "type1";
else if (i == 2) return "type2";
else return "error";
}
}
平时我们如何调用不同的算法?
- 常用的方法是利用if|else或者switch等。但当我们需要进行扩展时,就不可避免的需要修改源代码,这不是我们希望看到的。
策略模式则解决了上面的问题。我们可以动态的添加算法类或删除算法类,不用去修改其他源码,符合开闭原则。
那么策略模式到底长什么样子?
角色
- 策略算法接口
- 各种策略算法接口实现类
- 策略上下文,其持有策略算法接口对象
简易模板
- 策略算法接口
public interface Type {
String type();
}
- 各种策略算法接口实现类
public class Type1 implements Type {
@Override
public String type() {
return "type1";
}
}
public class Type2 implements Type {
@Override
public String type() {
return "type2";
}
}
public class Type3 implements Type {
@Override
public String type() {
return "type3";
}
}
- 策略上下文,其持有策略算法接口对象
public class Strategy {
private Type type;
public Strategy(Type type){
this.type = type;
}
public String getType(){
return type.type();
}
}
- 调用实现(其实就是多态的概念)
//在此调用Type1的算法
public class Demo {
public static void main(String[] args) {
Type type = new Type1();
Strategy strategy = new Strategy(type);
System.out.println(strategy.getType());
}
}
结果:
type1
以上即该模式的优点,我们可以根据自己的实际应用场景确定是否使用该设计模式:策略模式。
策略模式的缺点:由于我们可以自由添加策略算法类,而不去考虑其他,我们可以很轻松的编写很多策略算法类,这些类太多导致我们可能调用这些类的时候会常常搞混类的作用,解决方案就是你需要一个好的命名。