一:如何才能真正理解和掌握设计模式呢?
1:我觉得先得约定一下,到底什么样的标准才算是真正理解和掌握设计模式,当然这个没有国际标准,只能一家之言了.
我认为, 真正理解和掌握设计模式的标准就是:深入领会和掌握模式的设计思想和设计手法的精髓,能够自如的把设计模式应用到实际项目中去,而且不会拘泥于模式的实现形式,通常会根据实际情况进行变形的应用,但是万变不离其宗,这个宗就是模式的设计思想和设计手法的精髓。通俗点说,就是很多朋友说的“无招胜有招”的境界。
2:如何才能做到呢?
我认为需要做到如下几条:
(1)全面、系统、深入的掌握设计模式的知识,这是基础
(2)在实际工作中,反复的尝试使用,并总结得失
(3)再回去学习设计模式的理论,并结合应用来深入思考
(4)然后再用、再思考
(5)直到这些设计思想和设计方式都融入我们自己的思维里面,当我们做东西的时候,能够自然而然的,随意的应用这些知识来解决实际问题,就好像是自己思维的一部分,那就算小有成就了。
二: 如何才能把设计模式真正应用到我的项目中呢?
我觉得这个要分两种情况来说,一种是有一定话语权的朋友,另外一种是完全没有话语权的朋友。
1:针对有一定话语权的朋友,可以采用小步快跑的方式在项目中加入设计模式。
具体点说,就是逐步来,先从自己熟悉的,能掌控的模式开始,经过自己的分析和判断,项目中的某个地方或某个功能,可以使用某个模式来解决,于是就尝试着把这个模式加入到项目中,然后及时总结经验教训。
如果第一个模式添加成功了,那就开始第二个,以此类推。类似于重构的方式,但是没有重构那么多的要求。
如果不成功,没有关系,也得到宝贵的教训了,那就总结一下,下次再来,反正项目有的是。
记住了,一定要勇于迈出第一步,其实很多模式都很简单,多用几回就会了。
2:针对没有话语权的朋友
一个方案,就是把自己思考的结果,汇报给有话语权的领导,然后尽力说服他让你去尝试,如果被否,嗬嗬,下一个方案。
第二种方案,“同步并行法”,具体点说,就是自己在家里构建一套跟上班相同或相似的环境,然后利用业务时间,按照自己的想法来尝试一下,并总结经验教训。这种方案就是累人点,但效果也不错,当初我就是用这个方案来学习设计模式的,呵呵。现在大家都有笔记本了,上班和下班用的环境都一样,因此会更方便。
三:这些设计模式单独看都好像会,就是不会综合起来用,该怎么办呢?
我觉得这个问题也要分两个层面来说,一个是真的达到能单独使用每个设计模式的水平,另外一个是根本没有掌握单个设计模式如何应用。
1:针对真的达到能单独使用每个设计模式的水平的朋友,建议:
(1)多看看设计得很好的开源项目,当然由于这些开源项目都很大,要有意思的挑选其中的某些模块来看
(2)细看的内容不宜挑得过大,太大了,根本看不过来,或者很难完全领悟;也不宜挑得过小,太小了看不出多个模式组合应用的精妙之处
(3)切忌不要看成源代码注释型的,很多朋友分析和研究开源项目,就局限在代码上,如何一步一步调用起来的,然后在代码上写注释,觉得这样自己就看懂了。
其实不然,真正看别人的系统,在没有设计文档的情况下,难度是非常高的,你需要通过看源代码,来分析别人的分析过程,设计过程,需要从整体系统上、从设计思路上去理解和把握,这样才能真正学到人家设计的精髓。
简单点说,比如把这个开源项目已经实现的功能作为需求交给你,你怎么样一步一步分析和设计,得到你看到的最终的样子,这个难度是很大的,必须要自身达到相当的高度才行。
(4)看到好的设计或者好的设计模式的组合,要多去模仿,然后再实际项目中多尝试使用,然后体会这样组合是否合适,同时深化自己对单个模式本质的领悟
小结一下:就是要多看设计较好、大小合适的项目;然后多尝试,多使用;然后就是多思考和多总结。
2:针对根本没有掌握单个设计模式如何应用的朋友,建议:
(1)平和心态,避免眼高手低
(2)切切实实从基础理论开始,深入掌握和领会每个模式的功能、基本结构、实现手法、适用场景、使用效果等等
(3)小范围的尝试1-3个模式的组合,估计刚开始,更多的模式组合也不太容易控制,别着急,慢慢来
(4)在应用中不断加深对设计模式的理解,为综合应用这些模式打下坚实的基础
(5)到了一定程度,就可以参看 1 的建议了
记住:日积月累,必有所成