一,概述
策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
一般由三部分组成:
1.抽象策略角色:一般是接口或者抽象类
2,具体策略角色:接口实现,包装具体算法实现
3,环境角色:持有策略引用
java SDK中比较典型的应用就是比较器Comparator,它就相当于策略接口。我们可以实现这个接口从而实现不同的比较器。而Collections就相当于Context,它持有这个引用,Collectios.sort(List list,Comparator<? super T> c)
二,UML类图
三,代码演示
策略接口
public interface Strategy {
void execute();
}
具体策略实现类、
public class ConcreteStrategyA implements Strategy {
@Override
public void execute() {
System.out.println("执行策略A");
}
}
public class ConcreteStrategyB implements Strategy {
@Override
public void execute() {
System.out.println("执行策略B");
}
}
环境类,持有策略引用
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
this.strategy.execute();
}
}
测试
public class Test {
public static void main(String[] args) {
Context context = new Context(new ConcreteStrategyA());
context.executeStrategy();
}
}
结果
执行策略A
四,优缺点分析
优点:避免大量逻辑判断代码,符合类开闭原则。
缺点:会导致系统的类会越来越复杂。而且客户端必须自己知道所有的策略,然后决定用哪种算法。我们可以对策略模式进行优化。与工厂模式进行结合,将算法的选择交给工厂决定。