JavaScript之策略模式

2021-09-13 14:03:53 字數 1813 閱讀 1882

定義:定義一系列的演算法,把它們乙個個封裝起來,並且使它們可以相互替換。

乙個策略模式的實現至少包含兩部分:

1.策略類,封裝了具體的演算法,負責具體計算過程。

2.環境類,接收客戶的請求,將請求委託給某個策略類處理。

比如下面的場景:乙個公司需要計算年終獎,不同績效的員工年終獎計算方式不同,績效s的員工,年終獎為4倍工資,績效a年終獎為3倍工資,績效b年終獎為2倍工資。**實現:

function

calcbonus

(performancelebel, salary)

if(performancelebel ===

'a')

if(performancelebel ===

'b')

}

很簡單就完成了,但是很明顯這樣的**缺點不少:

再看看策略模式的實現,首先找到策略類和環境類:

// 具體的獎金計算過程抽離在了策略類的方法中,復用方便

const

performances

=function()

performances.prototype.

calculate

=function

(salary)

const

performancea

=function()

performancea.prototype.

calculate

=function

(salary)

const

performanceb

=function()

performanceb.prototype.

calculate

=function

(salary)

// 環境類,**請求

const

bonus

=function()

bonus.prototype.

setsalary

=function

(salary)

bonus.prototype.

setstrategy

=function

(strategy)

bonus.prototype.

getbonus

=function()

const bonus =

newbonus()

bonus.

setsalary

(1000

)bonus.

setstrategy

(new

performances()

)// 設定策略類

bonus.

getbonus()

// 4000

這是典型的物件導向做法,如果是要實現策略類,在js裡,普通的函式就可以完成了:

const stragegies =

,"a"

:function

(salary)

,"b"

:function

(salary),}

function

calcbounus

(lebel, salary)

calcbonus

('s'

,1000

)// 4000

calcbonus

('a'

,1000

)// 3000

策略模式還有乙個常用場景,就是表單驗證。

javascript策略模式

var validator 驗證型別所對應的錯誤訊息 messages 當前需要使用的驗證型別 config 暴露的公開驗證型別 validate function data if type if checker result checker.validate data i if result re...

設計模式之策略模式(javascript描述)

let calculatebyrank experience,viprank else if viprank 1 else if viprank 2 else if viprank 3 else if viprank 4 let playerexp calculatebyrank 100,2 呼叫最...

javascript設計模式 策略模式

1 var strategies 5 a function salary 8 910var getbonus function level,salary 1314 console.log getbonus s 10000 var strategies minlength function value...