定义:
定义一系列算法,把他们各自封装成策略类,然后把不变的部分和变化的部分分离开来,其中包括策略类和环境类(Context)。
使用场景:
缓动动画、表单验证等
//策略类
var strategies = {
'S': function(salary){
return salary * 4;
},
'A': function(salary){
return salary * 3;
},
'B': function(salary){
return salary * 2;
}
}
//环境类
var calculateBouns = function( level,strategy){
return strategies[level](strategy)
}
console.log(calculateBouns('S',4000));
console.log(calculateBouns('B',2000))
优缺点
优点:
1、利用组合、委托和多态技术和思想,可以避免多重条件选择语句;
2、将算法封装在独立的策略类里,使得易于切换,易于理解,易于扩展;
3、策略模式可以复用在系统的其他地方,从而避免重复的复制粘贴工作;
4、策略模式利用组合和委托让环境类拥有执行算法的能力,从而替代继承。
缺点:
1、程序中会增加许多策略类或者策略对象;
2、使用策略类必须要对所有的策略类算法了解清楚,否则不知道怎么选择。