无招胜有招——面向对象设计模式随笔,
最近在学习面向对象设计模式,GOF的23种设计模式大概看了一遍,简单总结一下,设计模式主要分为三种模式,分别是创建模式,结构模式,行为模式。
回过头想一下具体有哪些模式,在什么情况下用什么设计模式,好像还是一头雾水,但是我有几点我却印象深刻,下面就来说说我的感受。
什么是设计模式,我认为设计模式就是前人在程序设计过程中总结出来的经验,他不是凭空创造出来的。
为什么要用设计模式呢?
设计模式的出现就是为了解决软件的变化,因为世界上没有不变的软件,如果有那我想设计模式也就不存在了。刚才说设计模式是应对软件的变化,软件的变化给程序员带来的最大的痛苦是什么呢?我想是软件修改某一处会牵一发而动全身,也就是软件的耦合度过高,设计模式的任务就是降低软件模块之间的耦合度,尽量把模块之间的耦合降到最低。
那么如何降低耦合呢?
我认为关键就是抽象出比较稳定或不变化的部分,将变化比较频繁的部分提取出来进行封装,也就是常说的封装变化点,这是始终贯彻与23中设计模式的始终,我觉得也是设计模式的核心。
掌握了这个核心那么至于使用什么设计模式并不重要了,重要的是如何降低耦合以应对软件的变化。
我不喜欢一上来就考虑用什么设计模式,我倒是喜欢现来实现功能,然后用重构的方法来对程序进行重构,以降低程序之间的耦合,至于重构成什么样子,是否符合哪一种设计模式我并不关心,我所关心的是它能否很好的应对软件的变化。
这让我突然想起了《倚天屠龙记》中张三丰交张无忌太极拳的情节,张三丰先是刷了一套他自创的太极拳,张无忌由于天资聪慧看一遍就记下了所有的招式,可是张无忌在用太极拳和那个高手(忘了叫什么了)过招时,并没有发挥出太极拳的威力,于是张三丰就让张无忌忘掉所有的招式(具体忘掉招数的过程很是搞笑),不要拘泥一招一式,见招拆招,最终张无忌战胜了那个高手,这个情节告诉我们,太极拳其实并不是注重招式的,它的精髓就是一种思想,是以静制动,四两拨千斤的道理。
我想设计模式也类似于太极拳,它是一种思想,一种应对变化的解决思想,他更是一门艺术,更是一种境界,是一种以无招胜有招的境界。
以上就是我对设计模式的一些肤浅的理解,望批评指正!