现在应该说一说设计模式的学习了。设计模式是一个高度抽象的概念,每一种模式都是被抽象化了的解决某一问题的成功经验,理解设计模式需要洞察力,因而学习设计模式前,最好有一定的经验,不然很难体会设计模式的精髓。
写设计模式方面的文章对我来说困难重重,首先由于经验、水平的限制,对设计模式的理解还没有达到那个高度,其次设计模式文章很多,从简单介绍,到深入讨论都有,很难再有新的视角讨论。我今天就简单介绍一下我读过的两本设计模式的书,从我对这两本书的理解来介绍一下设计模式。
设计模式方面的书、资料很多,我读过两本,《设计模式》和《java与模式》,下面分别介绍。
《设计模式》就是常提及的Gof写的那本,是使用模式化方法研究的开创性著作《Design Patterns Elements of Reusable Object-Oriented Software》的中译本。无论如何这本书都称得上是经典,值得收藏,可以隔一段时间拿出来品味一番。全书共6章,第一章引言,介绍了关于设计模式的基本概念,以及如何阅读这本书。第二章介绍了一个应用了多个设计模式的实例。第三章讨论了5个创建型模式,第四章讨论了7个结构型模式,第五章讨论了11个行为模式。第六章是结论。本书提及的23个设计模式,也是模式中的经典,在新创建的设计模式中,很大部分是这23个模式中的变体。但这本书晦涩难懂也同样出名:
这本书介绍设计模式的对象描述语言,不是我们现在通用的UML,学习时,需要理解这种对象描述语言。
这本书示例实现语言是smalltalk和C++,学习这本书时要熟悉这两种语言,而C++本身就是一个非常难的语言。
我认为这本书不适合初学设计模式的人,尤其对于java开发人员。
《java与模式》是对《设计模式》在java这方面做的简单演绎。全书共55章,前两章介绍一些基础知识,包括UML的基本知识,接下来9章介绍面向对象的编程原则,剩余44章,讨论了26个设计模式,18个主题。这18个主题是设计模式在应用中的一些示例,有些是作者的经验,有些是广泛应用的成功示例。
《java与模式》是针对java语言的,因而示例都是用java实现的。本书提供大量的简单示例,简单的示例易于理解,便于以后使用模式时模仿。而在主题部分讨论的问题又很深刻,体现了作者对软件设计的深刻理解,是作者对设计模式的一个演绎。虽然这门书相对简单,我也是读了3遍之后,才体会出这本书的味道。以下是我阅读这本书的一点心得,我阅读了三遍,就将每一遍我理解了什么说一说。
第一次阅读:本书的前两章是基础的概念,自然要先了解;而面向对象的原则部分,需要一定的体会之后才能深刻理解,因而第一次读时,能理解多少就理解多少,不必深究;对于设计模式的阅读,至少要熟悉每个模式的uml图以及这个模式的示例代码;主题是第一次阅读的重点,这些主题是应用设计模式的范例,应该主要理解。
第二次阅读,要明白面向对象的原则说的是什么;重点研究每一个设计模式,理解适用范围,理解优缺点,以及模式和模式的比较,在每个设计模式中如何体现面向对象的设计原则。
第三次阅读,重点是体会面向对象的原则。
设计模式的学习不是一个简单的过程,需要反复学习,不断实践。