设计模式 策略者模式
概念
策略者模式也是一种组件协作模式

他的使用动机如下:

简单例子
假设一个编写一个类,根据不同的货币类型程序能够去运行不同的计算税的函数
一般的写法:
enum TaxBase{
CN_Tax,
US_Tax,
DE_Tax,
FR_Tax;
}
public class strategy1 {
TaxBase tax=TaxBase.CN_Tax;
public void CalculateTax(){
switch (tax){
case CN_Tax:
//dosomething
break;
case US_Tax:
//dosomething
break;
case DE_Tax:
//dosomething
break;
case FR_Tax:
//dosomething
break;
}
}
}
上面的例子代码是一般通常的写法,但是假设未来需要添加对新的货币支持,这样的代码就必须在枚举和函数主体去进行修改。 违背了开放封闭原则。即类模块应该是可扩展的,但是不可修改。
采用策略者模式优化
abstract class TaxStrategy{
abstract double CalculateTax();
}
class CN_Tax extends TaxStrategy{
@Override
double CalculateTax(Context context) {
return 0;
}
}
class US_Tax extends TaxStrategy{
@Override
double CalculateTax(Context context) {
return 0;
}
}
class DE_Tax extends TaxStrategy{
@Override
double CalculateTax(Context context) {
return 0;
}
}
public class strategy2 {
TaxStrategy strategy=null;
strategy2(StrategyFactory strategyFactory){
strategy=strategyFactory.NewStrategy();
//将这个对象赋值交给一个工厂处理
//这是后面工厂模式的手段.
}
public double CalculateTax(Context context){
return strategy.CalculateTax(Context context);//多态
}
}
采用了多态的手段,之后如果要新添加算法就很轻松。
总结
如果代码出现了if else 机构,并且在未来的代码更新上可能要新加判断,这个时候就需要去考虑一下策略者模式了。


浙公网安备 33010602011771号