虽然学习、研究设计模式已经很久,但一直未敢动笔写下任何关于设计模式的文章,一则是因为DP属于软件设计技术,较其它实用编程技术,更为抽象,需有认真思考、充分实践才能领会;其二,虽然GoF的DP一书已对所列举的23种Pattern作了详细的分析、介绍,但要逐一将体会写下来,仍然是一件十分艰巨的任务。因此,从写第一篇概述到现在历时3月有余(已记不清其间有多少次为了举一个贴切的例子苦恼到深夜;原本计划用1个月的时间完成全部文章,由于写作期间理解的加深,不断有新东西需要加入,以至于完成日期不断推后),我没有将写完的文章马上贴出来,而是一直等到写完了全部计划的20余篇文章才一起贴出来,除了考虑到在写作后面的文章时,随着理解的深入,可能需要对前面的文章进行修改,另一个重要的原因在于,写作的过程确实需要有足够的耐心,而且,由于日常工作的原因,我在写作之初实在无法预见到自己是否有足够的时间,足够的耐心来完成全部文章。
在写作的过程中,视讨论的主题的复杂程度,以讲清楚为主,我并没有采用一致的叙述方式,希望这不会影响读者的阅读。
今天,终于完成了最初计划的该系列全部文章的写作(由于最近工作日趋繁忙,不得已取消了一少部分内容,包括:基本OO设计原则、各模式比较<前面已大致作了比较,只是想再集中总结一下>、扩展设计模式<即23种设计模式以外的模式>)。
写作过程中,除了参考了概述中所列举的几本重要DP书籍外,还参考了一些网上的DP讨论或者相关文章,在此不再一一列举,仅在此对他们表示感谢。
整个系列是我DP学习的一个总结,我将整个系列命名为学习笔记,也是希望能够在今后随着自己学习、体会的深入,以及与大家讨论的深入,能够不断将其完善。希望我的这一DP系列能给初学者一些指引,同时希望各路Experts多提宝贵意见,指出我文章中的不足和错误之处,我一定及时修改、完善。
最后,需要再次说明的是设计模式需要多思考,多联系实际,它并不是空泛的理论,它是可资利用的OOD利器,愿大家都能通过实践掌握Design Patterns这一利器,更加冷静地面对变化的需求和不断膨胀的代码。
附:
在写作这一系列文章的过程中,偶然从Martin Fowler(OO界大师级人物及技术作家)的网页(http://martinfowler.com/bliki/OOPSLA2004.html)上了解到,OOPSLA2004通过小组讨论,认为GoF列出的23中典型设计模式中的以下四种:
Factory Method
Bridge
Flyweight
Interpreter
由于缺乏通用性,可以被其它模式替代等原因,被建议取消。
但是,即便如此,由于以上模式已被广泛学习和研究,我认为在实际当中,以上四个被建议取消的模式仍然存在一定的适用性,仍然值得我们去学习。
目前在设计模式的研究方面,与GoF的DP一书所提出的通用软件设计模式不同,目前涌现的新的设计模式主要为应用型设计模式,如Martin Fowler在其Patterns of Enterprise Application Architecture中提出的Web Server Patterns、Distribution Patterns等,Bruce Powel Douglass在其Real-time Design Patterns提出的Real-time Design Patterns等,由此使得Pattern与Framework的界限变得更加模糊。
Martin Fowler作为OO研究领域的大师级人物,在其书中也提出了一些通用软件设计模式,但目前对于新的软件设计模式的研究并没有充分展开。据说Linda Rising的<Pattern Almanac>收录的至2000年的模式的种类多达700余种,但显然该书并没有得到普遍的认同,以至于对该书所列举的模式进行研究的文章还很难找到。参考1、2分别给出了一些GoF的23种设计模式以外的模式,但并没有深入的讲解,因此,要加以利用还有一定的困难,感兴趣的朋友可以去看一下。
目前面世的DP书籍(包括我在笔记1 中提到的GoF的DP一书以外的几本书)几乎无一例外循着GoF指定的路线,指定的语言在讨论问题,同样,我的这一系列也无法出其右,做到有所突破,虽然我一直努力在整个系列中多融入一些自己的心得体会,试图将问题按照我的理解叙述得更加清楚。所以,如果你真的对设计模式感兴趣,建议你认真阅读GoF的DP一书(如果你还没有这样做过,或者,这样做过,但上次阅读时没有完全读懂)。
由于时间的关系,我最终放弃了将扩展设计模式(即23种经典模式以外的模式)的研究纳入本系列的想法,感兴趣的朋友可以深入研究Martin Fowler的书以获得更多有关软件设计模式的知识。
参考:
1、http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/EspPattlets.asp
2、http://patternshare.org/default.aspx/Home.TableColumns
Bill David
最终修改于2005年6月18日夜