策略模式
Posted 若栖1017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略模式相关的知识,希望对你有一定的参考价值。
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式的三个角色
封装角色: 屏蔽高层模块对策略,算法的直接访问,封装可能存在的变化
抽象策略角色: 策略,算法家族的抽象,通常为借口。定义每个策略或算法必须具有的方法和属性
具体策略角色 实现抽象策略中的操作,该类含有具体的算法
优点:
1.算法可以自由切换
2.避免使用多重条件判断
3.扩展性良好
缺点:
1.策略类数量增多,每一个策略都是一个类,复用的可能性很小,类数量增多
2.所有的策略类都需要对外暴露 上层模块必须知道都有哪些策略,然后才能决定使用哪一个策略
使用场景:
1.多个类只有在算法或行为上稍有不同的场景
2.算法需要自由切换的场景
3.需要屏蔽算法规则的场景
总结:定义是数据集合和规则序列,将相同的工作代码封装成不同的类,然后通过统一的策略处理类来处理。
策略模式实例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>策略模式</title> </head> <body> <script> var data=[[25,26],[25,5]]; var type=[‘add‘,‘jian‘] var validator={ config:{} }; validator.config.add = { suan: function (a,b) { return a+b; } }; validator.config.jian = { suan: function (a,b) { return a-b; } }; var ObjMethod=validator.config; function suanfa(ceshi) { for(var i in type){ switch (ceshi){ case type[i] : var leixing=type[i]; var val=ObjMethod[leixing].suan(data[i][0],data[i][1]); console.log(val); break; } } } suanfa(‘add‘); suanfa(‘jian‘); </script> </body> </html>
以上是关于策略模式的主要内容,如果未能解决你的问题,请参考以下文章