javaScript設計模式——策略模式

#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);
    }
}();

總的來講,策略模式在日常的開發中仍是比較經常使用的一個設計模式,但願對你們有幫助。對象

相關文章
相關標籤/搜索