首页 > 其他 > 详细

策略模式

时间:2017-06-13 13:18:49      阅读:266      评论:0      收藏:0      [点我收藏+]
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式的三个角色
封装角色: 屏蔽高层模块对策略,算法的直接访问,封装可能存在的变化
抽象策略角色: 策略,算法家族的抽象,通常为借口。定义每个策略或算法必须具有的方法和属性
具体策略角色 实现抽象策略中的操作,该类含有具体的算法
优点:
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>

 

策略模式

原文:http://www.cnblogs.com/zjy1017/p/7000541.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!