资讯专栏INFORMATION COLUMN

JS设计模式——策略模式

Jrain / 3460人阅读

摘要:版本策略模式在上个例子中虽然初步实现了策略模式,但是是仿照的传统面向对象语言,而的实现更为简单,直接把原来的实例定义成函数,原先的类用函数来委托。

1. 介绍

策略模式是JS设计模式中一大重要的模式有着广泛的应用

2. 定义

定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换

3. 应用

根据等级、工资计算奖金等类似情况、使用不同的动画效果、表单验证等

4. 思想

把算法实现和算法调用分开

5. 实现 1. 基本的策略模式

这个例子是根据传统的面向对象语言进行改造的,不同的类都实现了相同的方法,传入不同的实例都可以调用相同的方法。这其中用到了组合、委托、多态的思想。其中把不同的实现过程进行拆分,分成performanceS,performanceA,这是组合的思想,都实现相同的方法calculate这是多态的思想,多态的意思是不同的对象调用相同的方法其结果是不同的。再通过Bonus类去调用这是委托。

var performanceS=function(){}
performanceS.prototype.calculate=function(salary){
    return salary*4
}
var performanceA=function(){}
performanceA.prototype.calculate=function(salary){
    return salary*3
}
var Bonus=function(){
    this.salary=""
    this.strategy=""
}
Bonus.prototype.setSalary=function(salary){
    this.salary=salary
}
Bonus.prototype.setStrategy=function(strategy){
    this.strategy=strategy
}
Bonus.prototype.getBonus=function(){
    return this.strategy.calculate(this.salary)
}
var bonus = new Bonus()
bonus.setSalary(1000)
bonus.setStrategy(new performanceS())
console.log(bonus.getBonus())//4000
bonus.setStrategy(new performanceA())
console.log(bonus.getBonus())//3000
2. JS版本策略模式

在上个例子中虽然初步实现了策略模式,但是是仿照的传统面向对象语言,而JS的实现更为简单,直接把原来的strategy实例定义成函数,原先的Bonus类用calculateBonus函数来委托。组合的思想也还是比较明显,多态在这里体现得不是很明显,在strategieslevel这句中体现。

var strategies={
    S:function(salary){
        return salary*4
    },
    A:function(salary){
        return salary*3
    }
}
calculateBonus=function(level,salary){
    return strategies[level](salary)
}
console.log(calculateBonus("S",1000))//4000
3. 表单验证例子

在实际项目中经常需要对表单进行验证,用策略模式去实现表单验证是一种很不错的方法

var stratiges={
    isNotEmpty:function(val,errormsg){
        if(val.length<0){
            return errormsg
        }
    },
    minLen:function(val,minlen,errormsg){
        if(val.length           
               
                                           
                       
                 

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

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

相关文章

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

    摘要:将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。 前言 本系列文章主要根据《JavaScript设计模式与开发实践》整理而来,其中会加入了一些自己的思考。希望对大家有所帮助。 文章系列 js设计模式--单例模式 js设计模式--策略模式 js设计模式--代理模式 概念 策略模式的定义是:定义一系列的算法,把它们一个...

    bigdevil_s 评论0 收藏0
  • JS 设计模式 十四(策略模式

    摘要:策略模式定义一系列的算法把它们一个个封装起来并且使它们可相互替换。策略模式要素策略接口,用来约束一系列具体的策略算法。策略模式策略购买辆总金额策略购买辆总金额策略模式优点算法可以自由切换。策略模式缺点策略类会增多。所有策略类都需要对外暴露。 策略模式 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。策略模式是把一个类中经常改变或...

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

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

    Amos 评论0 收藏0
  • JavaScript 设计模式系列 - 策略模式与动态表单验证

    摘要:策略模式又称政策模式,其定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。的表单具有表单验证功能,用来校验用户输入的表单内容。实际需求中表单验证项一般会比较复杂,所以需要给每个表单项增加自定义校验方法。 showImg(https://segmentfault.com/img/remote/1460000020135990); 策略模式 (Strategy Pattern...

    宋华 评论0 收藏0
  • JS设计模式-策略模式

    摘要:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 优点: 策略模式利用组合、委托等技术和思想,可以避免很多if条件语句 策略模式提供了开放-封闭原则,使代码更容易理解和拓展 简单...

    mylxsw 评论0 收藏0

发表评论

0条评论

Jrain

|高级讲师

TA的文章

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