CSDN专家博客精华版

为人民服务!
  首页  :: 新随笔  :: 管理

书评--设计模式入门

Posted on 2007-12-17 10:15  csdnexpert  阅读(78)  评论(0编辑  收藏  举报

个别问题的最佳解答

成熟的产业,应该有很多经典的设计,广为流传的想法,共通的价值。由于信息硬件突飞猛进,信息应用面快速深入所有环节,导致需求多样与设计复杂。在开发与使用软件时,我们期待各种问题的最佳解答。

十多年前,Erich GammaRichard HelmRalph JohnsonJohn Vlissides (由于太有名了,一般称之为四人帮 Gang of Four GoF)仿效建筑师 Christopher Alexander 为建筑找模式(Pattern) [1],让设计这种抽象行为,也有可效法的准则。GoF 则为软件设计找模式。

除去资源、经费、时程等外在因素,在评估团队或个人是否可以成事时,往往以知识、技能和实践力为考虑点。知识代表着广度与深度,是解决问题的潜能。技能是驾御平台、工具、程序语言等实质技术的熟悉度,实践力则看人格特质了。而模式可算是平日培养设计能力的基本知识,当对于你所碰到之特殊问题能提出适当的解法,就是技能了。

初探对象导向与设计模式

在此介绍一本好书:设计模式入门(Design Patterns Explained:A New Perspective on Object-Oriented Design[2]),此书并非像坊间其它介绍设计模式的书,以某种程序语言,如 C++JavaC#VB.NET 等,条列 GoF 提出的 23 种设计模式之程序写法,两位作者仅以简单的例子描述如何应用几个常见的设计模式,如:FaçadeAdapterBridgeAbstract FactoryStrategyDecoratorSingletonDouble-Checked LockingObserverTemplate MethodFactory Method 等。

本书的重点在于对象导向分析设计的入门与模式的应用,因此在章节设计上,是穿插对象导向的特征,再以数个模式搭配说明。并非全然的模式介绍,也非讨论对象导向分析设计与撰写的专书。

模式可以帮我们提升思考的层级,作者在书中举了一个例子,当两个木匠讨论如何将两块木板 90 度接合时,木匠一问到:是要采用「楔形榫头接口」,还是「45 度角斜接面」?

楔形榫头代表两块木板的周缘皆切割成许多小的锯齿,像拼图一般接合两块木板,这代表了美观、耐用与高质量,但成本也较高。而 45 度角斜接面仅是将两块木板的周缘各磨出 45 度的斜切面,这隐含了速成、简陋但刚好合用。而木匠以他们自己所熟知的模式在讨论时,有两个层次,一是真实的设计方式,另一个层次代表着质量与成本。而模式就是解决问题的经验,并可帮助提升思考的层次。

书中描述模式的方式是先提出问题,并直观地给予解答,而后再描述该解答的不足,接着套用模式重新设计解法,并辅之以程序代码和评析,最后重点提示并做个总结,反复地描述以加深印象。

本书是以 Java C++ 当作解说用的语言,但仅是点到为止,当作解说意念的一部份,毕竟模式的实作偏于抽象,仅是 UML(United Modeling Language)的类别图(Class Diagram)呈现关联,会令不熟悉 UML 的程序设计师难以揣摩,程序代码可以让我们较为踏实地感受其论述J

阅读建议

讨论设计的书向来都不好读,一则是抽象的东西不容易吸收,因为未亲身经历,很难领会其义。二则是其论述不一定在工作中立刻用得上,不如技术类的工具书,直接对应相关操作或撰写程序的问题。这类书适合有读书习惯,且深思熟虑的读者,面对问题不仅问 How,如何去解决。更有兴趣研究 What Why。然而,静得下来坐得住,这往往要靠时间焠炼。享受豁然开朗之乐,先需经验养成。

本书定位为入门书,一开始便讨论对象导向的基本特色,若不熟悉对象导向分析,或仅稍有认识,都可以透过第一章先了解基本名词的定义与优点,以及第二章的 UML 语言简介。其后,循序渐进地展开越来越复杂的设计,先后以 CAD/CAM 和销售系统 e-tail 为范例,解释结构性、行为性和创造性三类的模式。你可逐章阅读,赏析各个模式的特性。

本书所介绍的模式不多,在相关章节以实例说明该模式的用途后,皆会以模式语言(Pattern Language)或模式模板(template)做个重点提示。也就是以:目的、问题、解法、参与者与合作者、结果、实作等面向,描述该模式。并附上对 GoF 原著的参照页数。建议你有了概念后,透过此加深对该模式的认知。

最后,本书的译文有些许文字误谬,审校不够严谨。但无损于整体概念,对于传达技术本身并没有问题,或可不必计较这些瑕疵,着重于琢磨作者提供的分析经验。

相关阅读

本书的最后一章( 22 )即为参考数据,你可以作为延伸阅读的依据。另外,与本书的相关网址:http://www.netobjectives.com/dpexplained/。若你不欲购买本书,或可在该网站逛逛。

而关于设计模式的原始巨著:Design Patterns: Elements of Reusable Object-Oriented Software,作者 Erich GammaRichard HelmRalph JohnsonJohn Vlissides。出版社 Addison Wesley. October 1994。本书是众多书籍援引的经典J



[1] Pattern 的中译很多,如范式、样式,在此谨依照本书译者所使用的名词。

[2] 此书的英文版于 2004/10 已经有第二版了,可惜台湾祇有第一版的译本。

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1379980