javaScript設計模式——策略模式
策略模式(Strategy):將定義的一組算法封裝起來,使其相互之間可以替換。封裝的算法具有一定獨立性,不會隨客戶端變化而變化。
商品促銷問題
問題描述:超時年底促銷,部分商品5折銷售,部分9折,普通用戶滿100返30,高級VIP用戶滿100返50…
對於前端,一般的處理方式可能是寫多個方法,針對不同的優惠策略選擇不同的方法來處理。如:
//100返30
function return30(price) {
//dosomething
}
//100返50
function return50(price) {
//dosomething
}
//9折
function percent90(price) {
//dosomething
}
...
這裏一個促銷策略對應一個方法顯得過於冗餘,並且很不方便管理,代碼閱讀性較差。可能有的胖友會想到把這些都封裝爲一個方法,然後使用if或者switch語句來判斷狀態並返回策略,如:
function priceStrategy(algorithm,price) {
switch (algorithm) {
case 'return30':
//dosomething
break;
case 'return50':
//dosomething
break;
case 'percent90':
//dosomething
break;
}
}
//調用方式
priceStrategy('return30',999);
這種方式較上一種已經好了很多,在策略的封裝以及可讀性提高了許多。但是這種方式在尋找策略的時候是從上到下一個一個的找,這樣如果方法多了的話,多少還是會影響一些效率的,所以我們採用對象的方法,使用鍵值對,直接找到對應的策略方法:
//價格策略對象
var priceStrategy = function() {
var strategy {
return30: function(price) {
//do something
},
return50: function(price) {
//do something
},
percent90: function(price) {
//do something
},
percent50: function(price) {
//do something
}
}
//算法調用接口
return function(algorithm, price) {
//如果算法存在,則調用算法,否則返回false
return strategy[algorithm] && strategy[algorithm](price);
}
}();
總的來說,策略模式在平常的開發中還是比較常用的一個設計模式,希望對大家有幫助。