每日一设计模式之策略模式

来源:互联网 发布:搜索引擎优化wtg168 编辑:程序博客网 时间:2024/06/09 21:09

策略模式

研究angularjs源码时候发现provider是策略模式和工程模式的混合,但是策略模式印象不是很深刻了,再翻出来看看写写吧。有爱看源码的小伙伴可以一起交流啊。

概念

定义一系列算法,把他们一个一个封装起来,并且使他们可以相互替换(具有相同的目标和意图)接口与实现分离

优点:

  1. 策略模式利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句
  2. 策略模式提供了对开放-封闭原则的完美支持,将算法封装在独立的 strategy 中,使得它们易于切换,易于理解,易于扩展

缺点:

  1. 会在程序中增加许多策略类或者策略对象,但实际上比把他们负责的逻辑堆砌在 Context 中要好
  2. 使用策略模式,必须了解所有的策略,才能更好的选择一个合适的策略

来个例子

光说这些感觉有点懵逼,身为一个社会主义接班人怎么能直说空话呢,来个小demo初步理解一下:

nameInput.isValidate = {    noNull:true,    maxLength: 32}//要是有许多类似的验证,那不是要写很多次吗,这个时候就用到了策略模式validateList = {    notNull: function(val){        return !!val;     },    maxLength: function(value, max){        return value.length() > max;    }}//这样只需要调用validteList这个策略就可以了,可以实现策略内部算法的随意切换,同时当需要修改某个条件的时候只需要在算法内部修改,调用的地方会直接生效,相当方便,类似angularjs的服务了,当然其实服务就是策略模式和工程模式的混合。

简单mark一下概念,接下来还会写jQuery表单封装用到的策略模式,加油,一起努力学习。

原创粉丝点击