1.策略模式的定义

策略模式又叫算法簇模式,将一组算法分装到一组具体共同接口的独立类或者对象中,它不影响客户端的情况下发生变化。

通常策略模式适用于当一个应用程序需要实现一种特点的服务和功能,而且该程序有多种实现方式时使用。

一般策略模式包含三个部分

1.环境对象:抽象策略对象的接口或者抽象类的引用。

2.抽象策略对象:一个一个的策略算法实现

3.具体策略对象:分装不同策略的算法(核心)

2.具体策略模式

  我写了一个验证表单的策略算法:

//具体策略对象
var Validate = {
    types:{},            //环境对象
    config:{},           //环境对象
    message:[],
    validate:function(data,callback){
        var i, msg, checker, result_ok,types;

        var flag = 0, msg;
        this.message = [];
        for(i in data){
            flag = 0;
            msg = "";
            types = this.config[i];
            if(!types){
                continue;
            }
            for(var j = 0; j < types.length; j++){
                var type = types[j];

                checker = this.types[type];
                if(!checker){
                    throw {
                        name : "ValidationError",
                        message : "No handler to validate type" + type
                    };
                }
                result_ok = checker.validate(data[i]);
                console.log("result_ok = "+result_ok);
                if(!result_ok){
                    this.message.push(checker.instructions);
                    msg = checker.instructions;
                    flag = 1;
                    break;
                }
            }
            console.log("i = "+i);
            console.log("msg = " + msg);
            if(flag){
                callback(i, msg);
            }
        }
        return this.hasErrors();
    },
    hasErrors:function(){
        return this.message.length !== 0;
    }
}

 策略算法实现:

Validate.types.isEmail = {
    validate:function(emailStr){
        var reg_email=/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
        return reg_email.test(emailStr);
    },
    instructions:"输入邮箱不合法"
}
Validate.types.isPhone = {
    validate:function(phoneStr){
        var reg_phone = /^((13[0-9])|(15[^4])|(18[0-9])|(17[0678])|(14[57]))\d{8}$/;
        return reg_phone.test(phoneStr);
    },
    instructions:"输入电话号码不合法"
}
Validate.types.isNotEmpty = {
    validate:function(str){
        return !!str.replace(/(^\s*)|(\s*$)/g,"");
    },
    instructions:"不能为空"
}

调用方式:

//配置验证信息
Validate.config = {
    name: ['isNotEmpty'],
    // idcard:['isNotEmpty','checkCardId'],
    // mobile:['isNotEmpty','isPhone'],
    channel:['isNotEmpty'],
    company_name:['isNotEmpty'],
    // work_level:['isNotEmpty'],
    // work_years:['isNotEmpty','isNumber'],
    email:['isNotEmpty','isEmail']
};

Validate.message = [];
        Validate.validate(data,function(id,msg){
            $("#"+id).parent('[name=hasError]').addClass('has-error');
            $("#"+id+"_error_tips").text(msg).show();
        });
        if(!Validate.hasErrors()) {
            $.ajax({
                url: that.cgi.addlist,
                type: 'POST',
                dataType: 'json',
                data: data
            }).done(function(result,xhr,status) {
                if(result.retCode === 0){
                    myUtils.showDialog("添加成功",result.retMsg,'type-info',BootstrapDialog.SIZE_SMALL,function(){
                        location.reload();
                    });
                }else if(result.retCode == 10301){
                    location.href="/boss/admin/index.html";
                }else{
                    myUtils.showDialog("添加失败",result.retMsg,'type-danger',BootstrapDialog.SIZE_SMALL);
                }
            }).fail(function(xhr,status) {
                myUtils.showDialog("添加失败","网络繁忙,请稍后再试!",'type-danger',BootstrapDialog.SIZE_SMALL);
            });
        }

 

JS策略模式的更多相关文章

  1. js 策略模式 实现表单验证

    策略模式 简单点说就是:实现目标的方式有很多种,你可以根据自己身情况选一个方法来实现目标. 所以至少有2个对象 .  一个是策略类,一个是环境类(上下文). 然后自己就可以根据上下文选择不同的策略来执 ...

  2. js策略模式vs状态模式

    一.策略模式 1.定义:把一些小的算法,封装起来,使他们之间可以相互替换(把代码的实现和使用分离开来)2.利用策略模式实现小方块缓动 html代码: <div id="containe ...

  3. js --策略模式

    策略模式的定义: 将算法一个个的单独进行封装,并且使他们可以相互替换.此模式让算法的变化不会影响到使用算法的客户. 先回顾一下,我们在做项目的过程中,是不是经常会遇见因为业务逻辑的关系,我们会写好多的 ...

  4. js设计模式(二)---策略模式

    策略模式: 定义: 定义一系列的算法,把他们一个个封装起来,并且是他们可以相互替换 应用场景: 要求实现某一个功能有多种方案可以选择.比如:条条大路通罗马 实现: 场景,绩效为 S的人年终奖有 4倍工 ...

  5. JS设计模式(2)策略模式

    什么是策略模式? 定义:根据不同参数可以命中不同的策略 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护. 何时使用:有许多种情况,而区分它们的只是他们直接的行为. ...

  6. js设计模式总结-策略模式

    策略模式 要解决的问题 当解决一个问题有多种方法时,选择使用哪种方法时就少不了要用大量的if语句进行判断,如果将这些方法的实现和判断语句放在一起实现就会产生问题, 比如增加一种的新的方法时,就不得不再 ...

  7. 3.js模式-策略模式

    1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(val ...

  8. 大熊君说说JS与设计模式之------策略模式Strategy

    一,总体概要 1,笔者浅谈 策略模式,又叫算法簇模式,就是定义了不同的算法,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 策略模式和工厂模式有一定的类似,策略模式相对简单容易理解,并 ...

  9. JS常用的设计模式(9)——策略模式

    策略模式的意义是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.一个小例子就能让我们一目了然. 回忆下jquery里的animate方法. $( div ).animate( {&quo ...

随机推荐

  1. 搭建自己的PHP框架心得(一)

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  2. ORA-01033:oracle初始化或者关闭错误

    1.打开oracle的相关服务项 2.cmd进入dos界面 3.C:\Users\Administrator>sqlplus /nolog 4.SQL> conn sys/oracle a ...

  3. 【转】Java并发编程注意事项

    保证线程安全的三种方法: 不要跨线程访问共享变量 使共享变量是final类型的 将共享变量的操作加上同步 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易. 编写多线程程序, 首先保证它是正 ...

  4. LeetCode#11. Container With Most Water

    问题描述 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ...

  5. Spring AOP支持的AspectJ切入点语法大全

    原文出处:http://jinnianshilongnian.iteye.com/blog/1420691 Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的, ...

  6. 使用FileZilla等软件搭建ftp服务器

    FTP的全称是File Transfer Protocol(文件传输协议).顾名思义,就是专门用来传输文件的协议. FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务.简单地 ...

  7. 第2章 Linux系统安装(3)_SSH连接Linux工具:SecureCRT和WinSCP

    4. SSH连接Linux工具 4.1 Linux网卡配置 (1)临时配置: ifconfig eth0 192.168.32.100 //给eth0网卡指定IP,写在ROM里的,关机会丢失. (2) ...

  8. 分页ajax+springmvc的简单实现

    页面部分源码: <li class="paginItem"><a href="javascript:getNewsList(2);">2 ...

  9. 面试中关于Java你所需知道的的一切

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

  10. SharePoint 2013技巧分享系列 - 同步Exchange显示高清用户照片

    在“SharePoint 2013技巧分享系列 - Active Directory同步显示用户照片”文中介绍了如何同步Active Directory显示用户照片,但是同步完成后,用户照片尺寸和清晰 ...