1. 理解javascript中的策略模式
策略模式的定義是:定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。
使用策略模式的優點如下:
優點:
1. 策略模式利用組合,委托等技術和思想,有效的避免很多if條件語句。
2. 策略模式提供了開放-封閉原則,使代碼更容易理解和擴展。
3. 策略模式中的代碼可以復用。
一:使用策略模式計算獎金;
下面的demo是我在書上看到的,但是沒有關系,我們只是來理解下策略模式的使用而已,我們可以使用策略模式來計算獎金問題;
比如公司的年終獎是根據員工的工資和績效來考核的,績效為A的人,年終獎為工資的4倍,績效為B的人,年終獎為工資的3倍,績效為C的人,年終獎為工資的2倍;現在我們使用一般的編碼方式會如下這樣編寫代碼:
var calculateBouns = function(salary,level) { if(level === 'A') { return salary * 4; } if(level === 'B') { return salary * 3; } if(level === 'C') { return salary * 2; }};// 調用如下:console.log(calculateBouns(4000,'A')); // 16000console.log(calculateBouns(2500,'B')); // 7500第一個參數為薪資,第二個參數為等級;
代碼缺點如下:
calculateBouns 函數包含了很多if-else語句。
calculateBouns 函數缺乏彈性,假如還有D等級的話,那么我們需要在calculateBouns 函數內添加判斷等級D的if語句;
算法復用性差,如果在其他的地方也有類似這樣的算法的話,但是規則不一樣,我們這些代碼不能通用。
2. 使用組合函數重構代碼
組合函數是把各種算法封裝到一個個的小函數里面,比如等級A的話,封裝一個小函數,等級為B的話,也封裝一個小函數,以此類推;如下代碼:
var performanceA = function(salary) { return salary * 4;};var performanceB = function(salary) { return salary * 3;}; var performanceC = function(salary) { return salary * 2};var calculateBouns = function(level,salary) { if(level === 'A') { return performanceA(salary); } if(level === 'B') { return performanceB(salary); } if(level === 'C') { return performanceC(salary); }};// 調用如下console.log(calculateBouns('A',4500)); // 18000代碼看起來有點改善,但是還是有如下缺點:
calculateBouns 函數有可能會越來越大,比如增加D等級的時候,而且缺乏彈性。
3. 使用策略模式重構代碼
策略模式指的是 定義一系列的算法,把它們一個個封裝起來,將不變的部分和變化的部分隔開,實際就是將算法的使用和實現分離出來;算法的使用方式是不變的,都是根據某個算法取得計算后的獎金數,而算法的實現是根據績效對應不同的績效規則;
新聞熱點
疑難解答
圖片精選