策略,即方法,策略模式,即方法模式,如何对多种方法进行有效管理并使用,这就是所谓的策略模式。
策略模式定义了一系列的实现方法,并将每一个方法都封装起来,而且使他们能够相互替换相互独立。
使用场景:
- 针对同一类型问题的多种处理方式,仅仅是具体行为有差别的时候
- 需要安全地封装多种同一类型的操作时
Context:用来操作策略的上下文环境
Stragery:策略的抽象
ConcreateStrageryA,ConcreateStrageryB:具体的策略实现
下面我们简单用一个例子来写,写一个房贷计算器,把首期付款后,剩下余额使用银行按揭分期付款。按揭房贷分为两种方式,等额本息和等额本金!那么框架这样写
<pre>
public interface Caculator{
public double getAccrual(double rate,int month,double money);
}
</pre>
<pre>
public class AccrualCaculator Implements Caculator{
@Override
public double getAccrual(double rate,int month,double money){
return 0;
}
}
</pre>
<pre>
public class CapitalCaculator Implements Caculator{
@Override
public double getAccrual(double rate,int month,double money){
return 0;
}
}
</pre>
<pre>
public class Main{
static Caculator caculator = new AccrualCaculator();
public static void main(String args[]){
caculator.getAccrual(rate,month,money);
}
public static void setCaculator(Caculator caculator ) {
Main.caculator = caculator ;
}
}
</pre>
这样写的话,以后要更新添加新的方式,直接继承Caculator 就可以了,这就是策略模式的基本设计思路。替换不同的策略只需要更改依赖注入的参数就可以了。。。
<h3>总结</h3>
策略模式主要是用来分离算法,在相同的行为抽象下有不同的具体实现策略。这个模式很好地演示了开闭原则,也就是定义抽象,注入不同的实现,从而达到很好的可扩展性
优点:
结构清晰明了,使用简单直观
耦合度相对而言较低,扩展方便
操作封装比较彻底,数据更为安全
缺点:
策略的增加会导致子类变得繁多