第二部分 设计模式
第5章 策略模式
定义:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。
其实就是定义一系列的算法,把他们各自封装成策略类,算法被封装在策略类内部的方法里。在对Context发起请求的时候,Context总是把请求委托给这些策略对象中间的某一个进行计算。
5.1 使用策略模式计算奖金
/** * 使用策略模式计算奖金 * S 4个月奖金 * A 3个月奖金 * B 2个月奖金 */ //1、最原始实现方式 //缺点: //(1)calculate函数比较庞大,包含了很多判断语句,这些语句必须包含所有的逻辑分支 //(2)函数缺乏弹性,如果增加了新的绩效等级,或者想把绩效等级的奖金系数修改一下,我们必须深入calculate函数内部实 //现违反了开放-封闭原则 //算法的复用性差,如果在程序的其它地方用到这些算法,我们只能复制粘帖 var calculateBonus = function(performanceLevel, salary){ switch(performanceLevel){ case 'S': return salary*4 break case 'A': return salary*3 break case 'B': return salary*2 break default: return salary break } } console.log(calculateBonus('A',10000))
//2、使用组合函数重构代码 //优点:(1)把各种算法封装到一个个的小函数里,可以一目了然的知道对应的哪种算法 //(2)复用性强 //缺点:calculateBouns函数会越来越庞大,在系统变化的时候缺乏弹性 var performanceS = function(salary){ return salary*4 } var performanceA = function(salary){ return salary*3 } var performanceB = function(salary){ return salary*2 } var calculateBonus = function(performanceLevel, salary){ switch(performanceLevel){ case 'S': return performanceS(salary) break case 'A': return performanceA(salary) break case 'B': return performanceB(salary) break } } console.log(calculateBonus('B',10000))