首先申明,此处将大量引用chjavach之博客,因为他写得太好了,太精准了!而且此博客的目的也只是相当于读书笔记而已.只是对自己的理解和记忆有用罢了!
策略模式可谓最简单的模式,其类图只要瓢一眼,保准你十年忘不掉!然而要灵活多变,掌握其精髓,如果没有深刻的认识,是难以做到的!
为了理解而理解
模式只是类结构,或者基于类的算法,不是基于数据结构的算法
与if-else相似,并且可以替代.重构之一就是if-else了,但是一个过程式思维和一个面向对象思维,之间的转换,是挑战哈
如图,策略A与策略B或者C,之间的关系,用下面的话来解释,真的是太精准了
转换角色,转换思考角度去观察模式,以策略模式的客户去认识策略模式,在类图的表现上,实际就是context的设计,或者如何使用策略的文档
具体的策略分析了,客户分析了,那怎么架起这座桥梁呢?那当然是接口和抽象类了!
关注了静态结构,那么运行时刻的特点,是下面这样的
再从对修改封闭,对扩展开放,这个软件原则来分析下
其实在chjavach博客中,涵盖了所有这一起的,我现在只不过想来个看图连线!
为了实践的模式
chjavach 博客中有两个事例,非常好理解,也具有非常好的参考价值,一是报价系统,对于报价这个多种策略行文的封装,二是对于容错处理,这个非常新鲜,主要是我经验太少的缘故,所以见笑了!
但是我觉得,对于自己这个学习者是,远远不够的!
之前也看过很多设计模式的书,当然只是纸上谈兵.但是在实践中,我却甚是苦恼.对于很多,我认为可以使用设计模式的地方却是无所适从,眼高手低!
曾特别的关注重构趋于模式,所以那时候也强烈的感受到,模式的使用,是慢慢的重构出来的!
博客写至此,突然想到,是不是背后的思维方式在作怪呢?
如果脑子力就是过程式,那么用设计模式就是不可能的!而重构,可以让我从过程慢慢的转变到面向对象思维中,慢慢的清晰与可理解!
那么为什么不以开始就以面向对象的思维方式呢?是不是平时整日浸淫在过程或者别的思维方式之中,对于面向对象的转换并不是那么的容易呢?
之前也一度想过,可能是对于背后的设计原则并没有深刻的理解吧?单职责原则,对于职责的划分,在实践和工作中,怎么慢慢的分析与得到呢?其实工作中,哪里还会这么的细细的想啊?或者以功能为导向的工作,扼杀了设计原则,设计模式的应用!
总结下
理解策略模式并不难,只要稍要基础的人,都可以做到!
然而要应用它,最难的还是克服习惯性的过程式思维,以面向对象的角度思考,并且以设计原则为根本去分析问题,设计解决方案
当然,多欣赏优秀代码,并且触类旁通,然后深刻对比与反思,也是可以达到应用好设计模式的!