定義:將定義的一組演算法封裝起來,使其相互之間可以替換。封裝的演算法具有一定的獨立性,不會隨客戶端的變化而變化廢話不多說,先來個例子
// 例如要寫乙個計算兩個數加減乘除的方法,會有人這麼寫
countnum(type, num1, num2) else if(type === 'subtract') else if(type === 'multiply') else
}countnum('add', 9, 3) // 12
countnum('subtract', 9, 3) // 6
countnum('multiply', 9, 3) // 27
countnum('', 9, 3) // 3
上面的例子,一定會有人這麼寫的,你要說沒有我也沒辦法(~ ̄▽ ̄)~,這樣寫首先不利於維護,其實也不好方便擴充套件
改進一下:
let countnum = ,
subtract(num1, num2) ,
multiply(num1, num2) ,
divide(num1, num2) ,
}countnum.add(9, 3) // 12
countnum.subtract(9, 3) // 6
countnum.multiply(9, 3) // 27
countnum.divide(9, 3) // 3
上面的例子就可以看成是乙個策略模式
now,現在有個需求,快要聖誕節,所以咧,超市中一部分商品8折**,一部分9折**,等到元旦還要搞大事,普通使用者滿100返30,vip使用者滿100返50,用策略模式來實現
// 定義乙個策略物件
let pricecestrategy = function(),
return50(price),
price80(price),
price90(price)
} // 策略方法呼叫介面
return ,
// 新增演算法
addstrategy(type, fn)
}}()
pricecestrategy.strategyfunction('return30', 100) // 130
pricecestrategy.strategyfunction('return50', 100) // 150
pricecestrategy.strategyfunction('price80', 100) // 80
pricecestrategy.strategyfunction('price90', 100) // 90
// 新增乙個演算法
pricecestrategy.addstrategy('return70', (price) => )
console.log(pricecestrategy.strategyfunction('return70', 100)) // 170
還有我們的表單驗證也可以使用策略模式
// 定義乙個策略物件
let inputstrategy = function(),
number(value)
} // 策略方法呼叫介面
return ,
// 新增策略
addstrategy(type, fn)
}}()
// 新增演算法
inputstrategy.addstrategy('nickname', (value) => $/.test(value) ? '' : '請輸入4-8為暱稱'
})
策略模式屬於物件行為型模式,主要針對一組演算法,將每乙個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響 到客戶端的情況下發生變化。通常,策略模式適用於當乙個應用程式需要實現一種特定的服務或者功能,而且該程式有多種實現方式時使用。策略模式中的三個物件:
利用策略模式構建應用程式,可以根據使用者配置等內容,選擇不同有演算法來實現應用程式的功能。具體的選擇有環境物件來完成。採用這種方式可以避免由於使用條件語句而帶來的**混亂,提高應用程式的靈活性與條理性。
優點:優化多重條件判斷,採用策略模式是的演算法更利於維護
可擴充套件性,策略模式提供了對「開閉原則」的完美支援,使用者可以在不修改原有系統的基礎上選擇演算法或行為,也可以靈活地增加新的演算法或行為。
策略類之間可以自由切換,由於策略類都實現同乙個介面,所以使它們之間可以自由切換。
缺點:由於選擇哪種演算法的決定權在使用者,所以對使用者來說就必須了解每種演算法的實現。
由於每種演算法間相互獨立,這樣對於一些複雜的演算法處理相同邏輯的部分無法實現共享,這就會造成一些資源的浪費。
JS 設計模式 策略模式
策略模式指的是定義一系列的演算法,把它們乙個個封裝起來。將不變的部分和變化的部分隔開是每個設計模式的主題,策略模式也不例外,策略模式的目的就是將演算法的使用與演算法的實現分離開來。可以很好的替換if else混亂的 var strategies a function salary b functio...
JS設計模式 策略模式
乙個根據等級計算獎金的例子。var stratagies a function salary b function salary var calculatebonus function level,salary console.log calculatebonus s 20000 console.l...
js設計模式 策略模式
策略模式的定義是 定義一系列的演算法,把它們乙個個封裝起來,並且使它們可以相互替換。策略模式指的是定義一系列的演算法,把它們乙個個封裝起來。將不變的部分和變化的部分隔開是每個設計模式的主題,策略模式也不例外,策略模式的目的就是將演算法的使用與演算法的實現分離開來。乙個基於策略模式的程式至少由兩部分組...