#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); } }();
总的来讲,策略模式在日常的开发中仍是比较经常使用的一个设计模式,但愿对你们有帮助。对象