javascript设想形式--战略形式

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<len; i++){
        var msg = this.cache[i];
        if(msg){
            return msg;
        }
    }
};

var validatorFun = function(){
    var validator    = new Validator();
    validator.add($("#username"),'isNotEmpty','用户名不为空');
    validator.add($("#mobile"),'isMobile','手机号码花样毛病');

    var errorMsg = validator.start();
    return errorMsg;
};


//挪用考证
var errormsg = validatorFun();
if(errormsg){
    alert(errormsg);
    return false;
}

> 运用战略形式以后,我们能够用过设置strategy来增加考证划定规矩,能够很好的举行复用,避免了许多前提挑选语句和代码的复制粘贴。

原文链接:javascript设想形式--战略形式

上一篇:javascript设想形式--单例形式

    原文作者:hczhi88
    原文地址: https://segmentfault.com/a/1190000010162322
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞