说起设计模式,这方面的书很多,大家往往第一印象就会想到 GoF的《Design Pattern》。的确,这本书明确的阐述软件设计中“模式”的概念,并将其系统化,以理论的方式呈现出来。但这本书有些久远,书中的范例都是居于 C 来实现,虽然其他的有关模式的书对此做了很多的注解,但大部分还是围绕着书中的23种设计模式,只不过在特定的语境中加以阐述和明确。似乎国内这种模式的研究太过于单一和偏执。造成了学习者对经典理解的泛滥,加重了学习者对模式困惑。同时,一般书的著者往往注重理论,而缺乏指导学习者如何在工作中掌握并巩固对模式的理解和应用,容易导致形而上学。模式应该是一门实践课程,而非纯粹的理论。
诚然能清楚地描述模式,的确有很大难度。况且目前软件开发中,开发者往往大量的使用各种API,Toolkit,Framework。导致开发者只有感性的认识,所以设计模式的总是给读者虚渺的感觉,难以在工作中得到体验。一方面是由于GOF的部分模式都已经固化到基础的API中,如Iterator模式,在日常工作中很难见到这种模式,在大部分的语言中都已经实现这个基本模式,在专门的设计中也只需合理调用这些API即可。如果学者在单独学者这一模式,估计也只字面理解,永远无法得到实践的理解。另一方面,框架的大规模使用,导致学习者忙于对框架的API的学习,而忽视了对框架本身的理解,其实框架中有大量的模式的设计,如果开发者能在日常工作,稍加阅读些源码,即接触到大量的设计模式。
还有一个重要的问题是我们为什么要学习模式,稍微有些开发经验的人都知道,代码写久了,就会接触到模式。其实,模式就是人为总结出来的一些规章制度而已,用于解决特定环境下的特定问题。在一个任何领域有工作经验的人,都知道这个领域的问题该这么解决。就好比上班不迟到,下班不早退,这是公司的制度,也是公司管理的模式。所以,一般先有问题,后有解决方法,这些方法固定了下来,就成为日常管理的模式。我们学习模式主要用来提高自己的业务能力,将日常的常用的工作方法整理归纳起来,再下次遇到同样的问题就能快速的解决。所以模式的学习应该有个过程,并在这个过程不断地学习提高。
那该如何学呢?
1) 在理路上找一本模式的书,把整个模式的理路了解一遍
2) 在工作中不断寻找符合模式的上下文,并归纳总结。
3) 多参与设计工作
4) 多读代码。
5) 回顾书籍
6) 2-5 迭代循环
学习过程本身都是比较痛苦的,业精于勤荒于嬉,学海无涯
欢迎拍砖