策略模式:定義一系列的算法,把他們一個個封裝起來,并且可以相互替換
參見《javascript設(shè)計(jì)模式與開發(fā)實(shí)踐》
解決問題:公司的績效根據(jù)員工的工資和年度績效來決定。每個人的工資和績效是不同的,但是計(jì)算方法是相同的。
js版的策略模式
//定義三個不同績效的策略,每個績效的策略實(shí)際的計(jì)算結(jié)果還有傳入的參數(shù)來計(jì)算
var strategies = {
"S": function( salary ){ //s是績效,salary是傳入的工資參數(shù),下同
return salary * 4;
},
"A": function( salary ){
return salary * 3;
},
"B": function( salary ){
return salary * 2;
}
};
//使用策略的計(jì)算函數(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```
通過策略模式,策略和實(shí)際的計(jì)算方法分工明確,關(guān)系解耦和,各自發(fā)生改變都不改變另一部分的代碼結(jié)構(gòu)和內(nèi)容。在具體策略中也不會出現(xiàn)緊耦合的判讀選擇語句。