设计模式之策略模式

策略模式

研究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表单封装用到的策略模式,加油,一起努力学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值