策略模式

定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式的三个角色
封装角色: 屏蔽高层模块对策略,算法的直接访问,封装可能存在的变化
抽象策略角色: 策略,算法家族的抽象,通常为借口。定义每个策略或算法必须具有的方法和属性
具体策略角色 实现抽象策略中的操作,该类含有具体的算法
优点:
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>
原文地址:https://www.cnblogs.com/zjy1017/p/7000541.html