定义一系列算法,把它们封装起来,并且使它们可以相互替换。其至少有两部分组成
- 策略类,负责各个具体的算法,负责具体计算过程
- 环境类Context, 接收用户请求,负责委托给策略类
简例
计算年终奖,有多种方案,使用各种策略类实现
奖金对应多种绩效,但是规则都是一样的,接收用户的设置和请求,并委托给策略:
这样,我们的Bonus类,并不负责计算,而将计算委托给传入的Performance类进行,做了好的解耦。
实现
总的来说,我们需要两个东西来实现JavaScript策略模式:策略集和策略管理
其实最好理解的就是表单验证了,针对各种表单,我们可以为其设置一个验证的策略集合:
|
|
然后有个Validator管理策略
可以通过add方法添加规则,通过validate执行validate。实现了我们的策略管理。
其他语言实现
策略模式(Strategy):定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响使用算法的客户
- Strategy类,定义所有支持算法的接口
- ConcreteStrategy,继承Strategy,实现具体算法或行为
- Context 类,维护算法Strategy类的引用
最终:
|
|
总结
- 策略模式是指定义一些列算法,以相同的方式调用这些算法,减少了算法使用和算法类之间的耦合。
- 使用Strategy可以有效的消除if,switch这种条件语句,避免大量的判断,更加便于理解
- 算法可重用
- 在js中其实并不明显,被各类函数直接代替