资讯专栏INFORMATION COLUMN

javascript设计模式--策略模式

李文鹏 / 3183人阅读

摘要:策略模式总结什么是策略模式策略模式的定义是定义一系列的算法,把他们独立封装起来,并且可以相互替换。策略模式的使用如果策略模式仅仅是用来封装算法,可能有点小才大用了。原文链接设计模式策略模式上一篇设计模式单例模式

javascript策略模式总结

1.什么是策略模式?

策略模式的定义是:定义一系列的算法,把他们独立封装起来,并且可以相互替换。

例如我们需要写一段代码来计算员工的奖金。当绩效为a时,奖金为工资的5倍,绩效为b时,奖金为工资的3倍,绩效为c时,奖金为工资的1.5倍:

var strategy = {
    "a":function(salary){
        return salary*5;
    },
    "b":function(salary){
        return salary*3;
    },
    "c":function(salary){
        return salary*1.5;
    }            
};

var calculate = function(levle,salary){
    return strategy[levle](salary);
}

//a级奖金
calculate("a",15000);

上面例子中,各种绩效对应着不同的算法,因此把他们封装在strategy里。calculate负责接受请求,然后把请求委托给指定的
策略类。这种实现方式,就是策略模式。

2.策略模式的优势

看回上面的例子,具体的算法和接受请求的函数是相互独立的,当我们需要添加新的等级d时,只需要在strategy中添加相应的算法就可以了,不需要修改到calculate,十分的灵活。

3.策略模式的使用

如果策略模式仅仅是用来封装算法,可能有点小才大用了。在实际开发中,可以用来封装一系列的业务规则,并且灵活的调用它们。
例如在表单验证中,就常常会使用到策略模式。

var strategy = {
    isNotEmpty:function(val,errorMsg){  //不为空
        if(val === ""){
            return errorMsg;
        }
    }
    isMobile:function(val,errorMsg){  //手机号
        if(!/^1[3|5|8][0-9]{9}$/.test(val)){
            return errorMsg;
        }
    }
}

//实现validator,负责接收请求。
var Validator = function(){
    this.cache = [];
};
Validator.protype.add = function(dom,rule,errorMsg){
        this.cache.push(function(){
            return strategy[rule](dom.value,errorMsg);
        })
};
Validator.protype.start = function(){
    var len = this.cache.length;
    for(var i = 0 ; i

> 使用策略模式之后,我们可以用过配置strategy来添加验证规则,可以很好的进行复用,避免了很多条件选择语句和代码的复制粘贴。

原文链接:javascript设计模式--策略模式

上一篇:javascript设计模式--单例模式

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/50976.html

相关文章

  • JavaScript设计模式----策略模式

    摘要:实际上在这种将函数作为一等对象的语言里,策略模式已经融入到了语言本身当中,我们经常使用高阶函数来封装不同的行为,并且把它传递到另一个函数中。 声明:这个系列为阅读《JavaScript设计模式与开发实践》 ----曾探@著一书的读书笔记 1.策略模式的定义 将不变的部分和变化的部分隔开是每个设计模式的主题。 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 2.策略模式...

    forrest23 评论0 收藏0
  • JavaScript 设计模式(二):策略模式

    摘要:策略模式实现的也是类似的场景。第二个部分是环境类不变,接收客户的请求,随后把请求委托给某一个策略类。参考文章设计模式设计模式与开发实践设计模式系统讲解与应用本文首发,期待作者以乐之名本文原创,有不当的地方欢迎指出。 showImg(https://segmentfault.com/img/bVbugi7?w=800&h=600); 策略模式:定义一系列的算法,把它们一个个封装起来,并且...

    荆兆峰 评论0 收藏0
  • JavaScript设计模式与开发实践系列之策略模式

    摘要:本系列为设计模式与开发实践作者曾探学习总结,如想深入了解,请支持作者原版策略模式策略模式的定义定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。 本系列为《JavaScript设计模式与开发实践》(作者:曾探)学习总结,如想深入了解,请支持作者原版 策略模式 策略模式的定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。 举个形象的例子,使用策略模式计算...

    spademan 评论0 收藏0
  • JS策略模式JavaScript设计模式与开发实践》阅读笔记

    摘要:策略模式可以避免代码中的多重判断条件。策略模式在程序中或多或少的增加了策略类。此文仅记录本人阅读设计模式与开发实践这个本时的感受,感谢作者曾探写出这么好的一本书。设计模式中很重要的一点就是将不变和变分离出来。参考设计模式与开发实践曾探 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且是它们可以相互替换。 策略模式可以避免代码中的多重判断条件。 策略模式很好的体现了开放-...

    Amos 评论0 收藏0
  • JavaScript设计模式策略模式

    摘要:设计模式与开发实践读书笔记。策略模式可以有效避免多重条件选择语句。当然,策略模式也有一些缺点增加了许多策略类或者策略对象。要使用策略模式,必须了解所有的,违反了最少知识原则。至此,回家咯附设计模式之发布订阅模式观察者模式 《JavaScript设计模式与开发实践》读书笔记。这本书挺好的,推荐。 俗话说,条条大路通罗马。在现实生活中,我们可以采用很多方法实现同一个目标。比如我们先定个小目...

    go4it 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<