策略模式是定義一系列的算法,把它們一個個封裝起來,而且使它們能夠相互替換。算法
策略模式的目的就是使算法的使用與算法分離開來。封裝的算法具備必定的獨立性,不會隨客戶端的變化而變化。設計模式
咱們實現一個計數器的加減乘除來講明策略模式markdown
function count(type, number1, number2) {
switch (type) {
case 'add':
return number1 + number2;
case 'subtract':
return number1 - number2;
case 'multiply':
return number1 * number2;
default:
return number1 / number2;
}
}
// if else
function count1(type, number1, number2) {
if (type === 'add') {
return number1 + number2;
} else if (type === 'subtract') {
return number1 - number2;
} else if (type === 'multiply') {
return number1 * number2;
} else {
return number1 / number2;
}
}
複製代碼
使用策略模式app
const count = {
add(number1, number2) {
return number1 + number2;
},
subtract(number1, number2) {
return number1 - number2;
},
multiply(number1, number2) {
return number1 * number2;
},
divide(number1, number2) {
return number1 / number2;
},
};
count.add(2, 3); // 5
count.subtract(10, 3); // 7
count.multiply(2, 3); // 6
count.divide(6, 2); // 3
複製代碼
策略模式是一種經常使用的設計模式 例如ide
表單校驗的規則ui
頁面須要根據不一樣的條件渲染不一樣的按鈕lua
商店不一樣的活動 計算價格url
......spa
減小重複代碼 策略模式利用組合、委託和多態等技術和思想,減小不少模板代碼。設計
擴展性 策略模式提供了對開放-封閉原則的完美支持,將算法封裝在獨立的策略類裏面,使它們易於切換,易於理解,易於擴展。