策略模式:定義一系列的算法讯沈,把他們一個個封裝起來,并且可以相互替換
參見《javascript設(shè)計模式與開發(fā)實踐》
解決問題:公司的績效根據(jù)員工的工資和年度績效來決定韭寸。每個人的工資和績效是不同的,但是計算方法是相同的。
js版的策略模式
//定義三個不同績效的策略氨距,每個績效的策略實際的計算結(jié)果還有傳入的參數(shù)來計算
var strategies = {
"S": function( salary ){ //s是績效,salary是傳入的工資參數(shù)棘劣,下同
return salary * 4;
},
"A": function( salary ){
return salary * 3;
},
"B": function( salary ){
return salary * 2;
}
};
//使用策略的計算函數(shù)俏让,傳入績效和工資參數(shù)
var calculateBonus = function( level, salary ){
return strategies[ level ]( salary ); //根據(jù)參數(shù)選用不同的策略
};
//使用時傳入績效等級和工資額
console.log( calculateBonus( 'S', 20000 ) ); // 輸出:80000
console.log( calculateBonus( 'A', 10000 ) ); // 輸出:30000```
通過策略模式,策略和實際的計算方法分工明確,關(guān)系解耦和舆驶,各自發(fā)生改變都不改變另一部分的代碼結(jié)構(gòu)和內(nèi)容橱健。在具體策略中也不會出現(xiàn)緊耦合的判讀選擇語句。