策略模式支持在运行时由使用者选择合适的算法,对于使用者而言不用关心背后的具体事项,而使用者自动根据当前程序执行的上下文和配置,从已有的算法列表中选择出合适的算法来处理当前任务。
1.要解决的问题
2.如何实现
3.在开源框架和类库中的使用
4.总结
要解决的问题
策略模式同样解决的是解耦的问题,目的是使调用的客户端与需要调用的算法解耦开来,保证算法的内部实现的更改不会影响到客户端的调用。当然这些算法往往需要封装为较为通用的。这样一来可以自由的从算法几种选取需要调用的合适的算法,就像搭积木一样,而算法也可以独立出来单测。
如何实现(应用场景之一表单验证)
对于一个表单,各个字段的输入值格式并不唯一,有的是数字,有的是电话号码。因而他们可能有各自都有的验证的要求。
策略模式是可复用的,比如多个字段可能都要求验证非空,这时,我们可以把场景的验证策略抽象为一个策略集合
使用者需要对表单数据进行校验时,只需要传入数据以及制定各个字段的验证策略,就可以给出相应的验证结果了,从而将表达你的处理和验证逻辑分离开来。
// 将校验的数据 var data = { name : ‘hh, gender: 1 } // 校验规则配置 validator.config = { name:{ text: ‘姓名‘, validators: [‘isNotEmpty‘,‘isValidName‘] }, identity:{ text:‘身份证号‘, validators:[‘isnotEmpty‘,‘isValidIdentity‘] } } // 调用获得校验结果 validator.validate(data);