码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2017-06-13 14:39:04      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:type   return   tle   validator   访问   之间   多重   扩展性   不同   

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

 

策略模式

标签:type   return   tle   validator   访问   之间   多重   扩展性   不同   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!