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

总的来讲,策略模式在日常的开发中仍是比较经常使用的一个设计模式,但愿对你们有帮助。对象

相关文章
相关标签/搜索