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设计模式--策略模式