第5章 策略模式
阿新 • • 發佈:2018-11-19
第二部分 設計模式
第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))