js 設計模式 策略模式

2022-05-17 17:54:33 字數 2484 閱讀 2365

定義:將定義的一組演算法封裝起來,使其相互之間可以替換。封裝的演算法具有一定的獨立性,不會隨客戶端的變化而變化

廢話不多說,先來個例子

// 例如要寫乙個計算兩個數加減乘除的方法,會有人這麼寫

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設計模式 策略模式

策略模式的定義是 定義一系列的演算法,把它們乙個個封裝起來,並且使它們可以相互替換。策略模式指的是定義一系列的演算法,把它們乙個個封裝起來。將不變的部分和變化的部分隔開是每個設計模式的主題,策略模式也不例外,策略模式的目的就是將演算法的使用與演算法的實現分離開來。乙個基於策略模式的程式至少由兩部分組...