前言
使用模板方法模式,能够进行共有方法的抽取,快速复用和扩展。策略模式也是一种行为型模式,作用和模板方法模式一样。大家对 if-else
嵌套过多的处理方法,最常见的手段就是利用策略模式。
目录
一、定义
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换
二、模式原理分析
//抽象的策略角色
public interface Strategy{
//策略模式的运算规则
public void doSomething();
}
//具体的策略角色
public class ConcreteStrategy1 implements Strategy{
public void doSomething(){
System.out.println("具体策略1的规则");
}
}
public class ConcreteStrategy2 implements Strategy{
public void doSomething(){
System.out.println("具体策略2的规则");
}
}
//封装角色
public class Context{
//抽象策略
private Strategy strategy = null;
//构造函数设置具体策略
public Context(Strategy _strategy){
this.strategy = _strategy;
}
public void doAnyThing(){
this.strategy.doSomething();
}
}
复制代码
高层的模块调用很简单,需要知道使用哪个策略,构建出它的对象
public class Client{
public static void main(String[] args){
//声明一个具体策略
Strategy strategy = new ConcreteStrategy1();
Context context = new Context(strategy);
//执行
context.doAnyThing();
}
}
复制代码
三、使用场景
-
只希望客户端选择已经封装好的算法场景而不用关心算法实现细节
-
多个类只有在算法或行为上稍有不同的场景
-
算法需要自由切换的场景
-
需要屏蔽算法规则的场景
-
分离使用策略和创建策略的场景
四、优点
-
算法可以自由切换
-
避免使用多重条件判断
-
扩展性好
五、缺点
-
策略类数量增多,复用可能性小
-
所有的策略类需要对外暴露
-
修改代码时,需要了解每个策略类,对使用场景进行修改
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END