一、什麼是策略模式?
策略模式的定義是:定義一系列方法,把它們一個個封裝起來,並且使用它們可以相互替換。
一個基於策略模式的程序至少由兩部分組成,第一個是策略類,裏面封裝了具體的算法,並負責計算的過程;第二個部分是環境類,負責接收請求,然後將請求委託給策略來實現。
策略模式,將算法的實現以及算法的使用分離開來。
二、實現一個策略類
首先我們是實現一個函數,用來計算員工工資:
let calculate = function(level, salary) {
if(level === 'S') {
return salary*4
}
if(level === 'A') {
return salary*3
}
if(level === 'B') {
return salary*2
}
}
這個函數根據員工的等級與及工資計算出員工的最終工資。
但是這個函數的設計實現並不好:
- 過多的if-else語句
- 缺乏彈性,如果要加入C就要深入函數內部
- 複用性較差
改進:
// 策略類
let strategies = {
"S": function(salary) {
return salary*4
},
"A": function(salary) {
return salary*3
},
"B": function(salary) {
return salary*2
}
}
// 環境類
let cal = function (level,salary) {
return strategies[level](salary)
}
這裏消除了if-else語句,使得函數的性能更好,並且將算法的實現和算法的使用分離開來,增強了函數的彈性和可複用性。