#javaScript設計模式——策略模式javascript
策略模式(Strategy):將定義的一組算法封裝起來,使其相互之間能夠替換。封裝的算法具備必定獨立性,不會隨客戶端變化而變化。前端
##商品促銷問題java
問題描述:超時年末促銷,部分商品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);
這種方式較上一種已經好了不少,在策略的封裝以及可讀性提升了許多。可是這種方式在尋找策略的時候是從上到下一個一個的找,這樣若是方法多了的話,多少仍是會影響一些效率的,因此咱們採用對象的方法,使用鍵值對,直接找到對應的策略方法:code
//價格策略對象 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); } }();
總的來講,策略模式在日常的開發中仍是比較經常使用的一個設計模式,但願對你們有幫助。對象