博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaScript设计模式——策略模式
阅读量:5914 次
发布时间:2019-06-19

本文共 1458 字,大约阅读时间需要 4 分钟。

hot3.png

#javaScript设计模式——策略模式

策略模式(Strategy):将定义的一组算法封装起来,使其相互之间可以替换。封装的算法具有一定独立性,不会随客户端变化而变化。

##商品促销问题

问题描述:超时年底促销,部分商品5折销售,部分9折,普通用户满100返30,高级VIP用户满100返50...

对于前端,一般的处理方式可能是写多个方法,针对不同的优惠策略选择不同的方法来处理。如:

//100返30function return30(price) {    //dosomething}//100返50function 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);    }}();

总的来说,策略模式在平常的开发中还是比较常用的一个设计模式,希望对大家有帮助。

转载于:https://my.oschina.net/keysITer/blog/759652

你可能感兴趣的文章
24.管道符和作业控制 shell变量 环境变量配置文件
查看>>
Spring 4.2.2以上版本和swagger集成方案和踩过的坑
查看>>
MURA120T3G
查看>>
Spring Cloud与Kubernetes的集成
查看>>
NEO智能合约调试流程说明
查看>>
PHP 表单 - 必需字段
查看>>
Ember官网文档整理
查看>>
MarkDown使用
查看>>
安装成功的nginx如何添加未编译安装模块
查看>>
Vim命令合集
查看>>
Sublime2下比较好用的插件
查看>>
OSChina 周一乱弹 —— 程序猿到底是干嘛的?
查看>>
OSChina 周五乱弹 ——大家好,我叫风油米青
查看>>
nginx 基本配置
查看>>
证明:实对称矩阵中,属于不同特征值的特征向量相互正交
查看>>
解决 IntelliJ IDEA properties中文显示问题
查看>>
如果决定安装xshell 麻烦或者项目部署麻烦,那么就用JSch 吧,开源自己编写你想要的功能...
查看>>
推荐MySQL的国外blog
查看>>
The Blocks Problem
查看>>
dreamweaver 的学习 【基础知识】1
查看>>