JavaScript設計模式——策略模式

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

總的來說,策略模式在平常的開發中還是比較常用的一個設計模式,希望對大家有幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章