1、介绍
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
2、 类图

3、角色划分
● 环境(Context)角色:持有一个Strategy的引用。
● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
4、代码示例
抽象策略类 Strategy.java
1  | public interface Strategy {  | 
具体策略类(实现策略接口,提供具体算法)
ConcreteStrategyA.java
1  | public class ConcreteStrategyA implements Strategy {  | 
ConcreteStrategyB.java
1  | public class ConcreteStrategyB implements Strategy {  | 
Context.java 持有具体策略类的实例,负责调用具体算法
1  | public class Context {  | 
测试类
1  | public class TestStrategyPattern {  | 
5、策略模式优缺点
①、 优点
- 算法可以自由切换
 - 避免使用多重条件判断
 - 扩展性良好
 
②、缺点
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类