Javascript的策略模式

这次给大家带来javascript策略模式,javascript策略模式的注意事项有哪些,下面就是实战案例,一起来看一下。

策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

策略模式利用组合、委托等技术和思想,可以避免很多if条件语句

策略模式提供了开放-封闭原则,使代码更容易理解和拓展

简单取值

立即学习“Java免费学习笔记(深入)”;

很多例子�以绩效等级和薪资计算奖金为�说明

let calculateBouns = (level,salary)=>{    if(level=='A'){        return salary * 1.4;    }else if(level=='B'){        return salary * 1.3;    }else if(level=='C'){        return salary * 1.2;    }else{        return salary;    }}console.log(calculateBouns('A', 8000)); //11200console.log(calculateBouns('C', 8000)); //9600

登录后复制

策略模式重构

//策略对象class ruleA{    calculate(salary){        return salary * 1.4;    }} class ruleB{    calculate(salary){        return salary * 1.3;    }} class ruleC{    calculate(salary){        return salary * 1.2;    }} //奖金类class Bouns{    constructor(){        this.salary = null;        this.level = null;    }    setLevel(level){        this.level = level;    }    setSalary(salary){        this.salary = salary;    }    getBouns(){        return this.level.calculate(this.salary);    }}let tom = new Bouns(),jerry = new Bouns();//设置薪资tom.setSalary(8000);jerry.setSalary(10000);//设置策略对象tom.setLevel(new ruleA());jerry.setLevel(new ruleA());console.log(tom.getBouns()); //11200console.log(jerry.getBouns()); //14000jerry.setLevel(new ruleB());console.log(jerry.getBouns()); //13000

登录后复制

表单

还有一种�理解策略模式的例子就是表单验证,通常会涉及到多个字段有效性判断

let form = document.getElementById("Form");form.onsubmit = function(){    if(form.username.value == ''){        alert('用户名不能为空');        return false;    }else if(form.username.value.length 

这样实现的代码的缺点:

函数体积臃肿,包含了很多if判断

函数缺乏弹性,违反了开放-封闭原则

函数复用性差,如果增加表单需要类似验证,只能复制一遍

策略模式实现表单验证

// 策略对象let strategys = {    isEmpty: (value,errorMsg)=> {        if(value === '') {            return errorMsg;        }    },    // 限制最小长度    minLength: (value,length,errorMsg)=> {        if(value.length  {        if(!/(^1[3|5|8][0-9]{9}$)/.test(value)) {            return errorMsg;        }    } };class Validator{    constructor(){        this.cache = []; //保存校验规则    }    addRule(dom,rules){        var self = this;        for(let i = 0, rule; rule = rules[i++]; ){            let strategyAry = rule.strategy.split(":");            let errorMsg = rule.errorMsg;            self.cache.push(function(){                let strategy = strategyAry.shift();                strategyAry.unshift(dom.value);                strategyAry.push(errorMsg);                return strategys[strategy].apply(dom,strategyAry);            });        }    }    check(){        for(let i = 0, fn; fn = this.cache[i++]; ) {            let msg = fn(); // 开始效验 并取得效验后的返回信息            if(msg) {                return msg;            }        }    }}// 代码调用let form = document.getElementById("Form");let validateFunc = function(){    let validator = new Validator(); // 实例化Validator    //添加一些校验规则    validator.addRule(form.username,[        {strategy: 'isEmpty',errorMsg:'用户名不能为空'},        {strategy: 'minLength:6',errorMsg:'用户名长度不能小于6位'}    ]);    validator.addRule(form.password,[        {strategy: 'minLength:6',errorMsg:'密码长度不能小于6位'},    ]);    validator.addRule(form.phone,[        {strategy: 'illegalPhone',errorMsg:'手机号格式不正确'},    ]);    return  validator.check();};form.onsubmit = function(){    let errorMsg = validateFunc();    if(errorMsg){        alert(errorMsg);        return false;    }else{        submit();    }}

登录后复制

策略模式属于对象行为模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,使得它们可以相互替换。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

关于JS继承的详解

node的文件批量重命名

以上就是Javascript的策略模式的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2783196.html

(0)
上一篇 2025年3月8日 16:45:49
下一篇 2025年2月25日 14:03:20

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Javascript的观察者模式

    这次给大家带来javascript的观察者模式,javascript观察者模式的注意事项有哪些,下面就是实战案例,一起来看一下。 观察者(又称发布订阅)模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象…

    编程技术 2025年3月8日
    200
  • js如何获取select标签选中的值

    本文主要和大家分享js如何获取select标签选中的值,有两种方式和大家分享,希望能帮助到大家。 var obj = document.getElementByIdx_x(”testSelect”); //定位idvar index = o…

    编程技术 2025年3月8日
    200
  • 几种JS创建对象的方式分享

    本文主要和大家分享几种JS创建对象的方式,希望能帮助到大家。 1、使用原生构造函数创建特定类型的对象   var person =new Object();    person.name=”wangwu”;    person.age=”2…

    编程技术 2025年3月8日
    200
  • Javascript的单例模式

    这次给大家带来javascript的单例模式,javascript单例模式的注意事项有哪些,下面就是实战案例,一起来看一下。 单例模式是一个用来划分命名空间并将一批属性和方法组织在一起的对象,如果它可以被实例化,那么它只能被实例化一次。 划…

    编程技术 2025年3月8日
    200
  • JS的正则表达式如何使用

    这次给大家带来js的正则表达式如何使用,使用js正则表达式的注意事项有哪些,下面就是实战案例,一起来看一下。 学好正则表达式很重要,下面是一些关于正则表达式的基本知识整理  : 转义字符 ^  : 匹配字符串开始位置 $  : 匹配字符串结…

    编程技术 2025年3月8日
    200
  • Angular和Vue.js对比分析

    Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面。当和其它网络工具配合使用时,Vue.js 的优秀功能会得到大大加强。如今,已有许多开发人员开始使用 Vue.js 来取代 Angular 和 Re…

    编程技术 2025年3月8日
    200
  • js中传递和拷贝详解

    我们知道js有几种基本的数据类型和其他的复杂数据类型包括(对象,数组,函数),基本数据类型的赋值其实就是值的拷贝,我们称之为值传递,赋值后的变量和原来的变量除了值相等之外并无其他关联。 let x = 666let y = xlet m =…

    编程技术 2025年3月8日
    200
  • JS实现集合去重交集并集差集功能实例分享

    本文主要和大家介绍了JS实现的集合去重,交集,并集,差集功能,结合实例形式分析了javascript基于数组实现的集合去重、交集、并集、差集等相关实现技巧,需要的朋友可以参考下,希望能帮助到大家。 1. js 实现数组的集合运算 为了方便测…

    编程技术 2025年3月8日
    200
  • webpack如何打包js

    webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。本文主要和大家介绍了webpack打包js的方法,在代码实践之前,先说一写webpack的基础知识。 1、为什…

    2025年3月8日
    200
  • Require.js详解

    这次给大家带来require.js详解,使用require.js详解的注意事项有哪些,下面就是实战案例,一起来看一下。 index.html nbsp;html>                    body        //将r…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论