javascript設計模式--策略模式

javascript策略模式總結javascript

1.什麼是策略模式?java

策略模式的定義是:定義一系列的算法,把他們獨立封裝起來,而且能夠相互替換。算法

例如咱們須要寫一段代碼來計算員工的獎金。當績效爲a時,獎金爲工資的5倍,績效爲b時,獎金爲工資的3倍,績效爲c時,獎金爲工資的1.5倍:segmentfault

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.策略模式的優點dom

看回上面的例子,具體的算法和接受請求的函數是相互獨立的,當咱們須要添加新的等級d時,只須要在strategy中添加相應的算法就能夠了,不須要修改到calculate,十分的靈活。函數

3.策略模式的使用this

若是策略模式僅僅是用來封裝算法,可能有點小才大用了。在實際開發中,能夠用來封裝一系列的業務規則,而且靈活的調用它們。
例如在表單驗證中,就經常會使用到策略模式。設計

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來添加驗證規則,能夠很好的進行復用,避免了不少條件選擇語句和代碼的複製粘貼。code

原文連接:javascript設計模式--策略模式

上一篇:javascript設計模式--單例模式

相關文章
相關標籤/搜索