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