作为提高软件工程、系统设计与开发的效率和质量的一种极其有效的方法,设计模式步入了商业软件开发的主流。模式收录了许多优秀的软件设计的实践经验,并把这些经验提供给所有软件工程师。
本书是为专业软件开发者记载模式的系列书籍的第4卷,代表了模式领域最先进的实践。本书中的29章都发表于最近的PLoP会议上,且由与会的权威专家对其做了深入的研究和改进。这些代表着PLoP会议精华的模式提供了用于解决各种领域中现实问题的有效的、经过测试的和通用的软件设计解决方案。
本书涉猎广泛,涉及面向对象基础结构、编程策略、时间模式、安全性、面向域模式、人机交互、评审和软件管理领域的模式。在其中,你会找到:
角色对象 报告
主动反应 组合多媒体人工制品
C++语言风格 用户交互
安全性结构模式
随着模式由研究领域逐步发展到应用于实际软件开发中,越来越多的开发者认识到可重用的设计模式(如包含在本卷中的这些模式)能帮助他们更快更经济地开发应用程序。
第1部分基本面向对象模式
第1章AbstractClass(抽象类)
第2章RoleObject(角色对象)
第3章EssenCe(本质)
第4章ObjectRecursion(对象递归)
第5章Prototype-BasedObjectSystem《基于原型的对象系统》
第6章BasicRelationship(基本关系)模式
第2部分面向对象基础结构(Object-Orientedlnfrastructure)模式
第7章AbstractSession(抽象会话):一种对象结构模式
第8章:ObjectSynchronizer(对象同步器)
第9章Proactor(主动反应)
第3部分编程策略
第10章C+十语言模式
第11章Smalltalk体系结构模式
第12章存储器维护协会的High-LevelandProcess(高级和处理)模式:管理有限的存储器模式
第4部分时间
第13章Temporal(时间)模式
第14章History(历史)模式集合
第5部分安全性
第15章支持应用程序安全性的体系结构模式
第16章Tropyc:面向对象的加密软件的模式语言
第6部分面向领域的模式
第17章使用查询对象创建报表
第18章特征抽取:用于信息检索的模式
第19章有限状态机模式
第7部分人机交互模式
第20章设计可导航信息空间的模式
第21章创建可重用的多媒体人工制品
第22章显示维护:一种模式语言
第23章一种输入和输出模式语言:从远程通信中学到的经验
第8部分评审
第24章确定支持者:用于程序委员会的组织模式语言
第25章用于作者研讨会的模式语言
第9部分管理软件
第26章客户交互模式
第27章有能力的、有生产力的、满意的:一些用于保护生产人员的组织模式
第28章SCRUM:用于超生产力软件开发的模式语言
第29章大泥球
关于PhSh和Phugues
时间:1621年;地点:普利茅斯(Plymouth),此处最后变为马萨诸塞州(Massachusetts)。1620年11月抵达普利茅斯的一群英格兰定居者要开始种植农作物了。不久以后,一位名叫Squanto的印第安人前来拜访。他显然是一位园艺爱好者,他提议给这些定居者教授种植技巧。首先是将鱼放入土里使土地肥沃,这种技巧加上其他一些新大陆(New World)的种植技巧带来了巨大的丰收。定居者顺利度过了随之而来的冬季,这在很大程度上要感谢Squanto和他明智的建议。
毫无疑问,这是一个虚假的故事。但是现代园艺家肯定了Squamo关于鱼在农业中的作用的见解。实际上,你可在许多园艺商店买到鱼肥。我们的农业祖先可能不具有植物生理学的深厚知识,但是他们知道什么有用,而且还把经验一代一代传下来。
一百多年以后,在半个地球远的地方,即现在的德国,一位多才多艺的大师展现了他的才华。传说Johann Sebastian Bach.拜访普鲁士国王Frederick,寒喧过后,国王要Bach为他演奏。Bach在风琴旁坐下,即兴创作了一首5个乐章的赋格曲,自身也是作曲家的国王对Bach钦佩不已。
Bach的作品是巴洛克音乐的经典。他把本领传给了后代——他的后代中的许多人也变成了重要的音乐家和作曲家。
知识代代相传。语言就是生动的例子,经久不衰,从口传单词和概念演变而来,从一个人传给另一个人。这方面的一个例子是英语,其源头可追溯到许多语言,包括德语、希腊语和拉丁语。这里有一个问题:英语的多方面继承带来了一个显然会使人混乱的拼写规则的大杂烩。比如,在“physics”中,我们把字母ph拼作“f”音;而在“fish”和“fugue”中,则把“f”拼作“f”音。对于这种不规范性有其历史和语言学的原因,不过这些对我们没有造成影响。我们只是记住了,它是“fugue”而不是“phugue”。
在软件中,我们没有数个世纪的历史可以依靠。我们没有从先辈那里学会农业,也不能追根溯源到中世纪Chaucer时代的英语。但我们存在的时间已足够我们学会一些事情了。其中最重要的一条就是:我们必须分享我们学到的。如果我们都把知识占为己有,像林鼠那样把其存储起来,那么我们所从事的领域肯定会停滞不前,我们注定要使同行和继任者重复我们犯过的错误。慢慢地,重新发明取代了创新。进步减慢了,领域变得愈加贫瘠。
模式是知识的导管,可以用来获取和传送经过时间证明的实践。模式不仅仅是技巧或者着起来很随意酌拼写规则,它们可以传递理解。它们不仅仅告诉你what和how,还告诉你why和when,这是它们的真正力量所在。
我们能从模式那里合理地期望得到什么?也许它们会帮助其他入开发出比我们所卉发的更好的软件;也许它们会允许人们把他们做的工作建立在我们所做工作的基础上。我、们肯定希望模式能帮助其他人避免我们遇到过的陷阱。
不过我们可以期望更多。计算机技术的广泛传播对社会施加了巨大的影响,从而必须负责任地运用它们。虽然模式不会强制你负责任地做事,但它们能减轻重新发明的痛苦,把你解放出来以考虑更高层次的目的。最终,模式使得每个人(软件用户和开发人员)的生活更加美好。
无疑,目标有高有低。我们希望“程序设计的模式语言”系列的第4卷:能实现这些目标。
致谢
现在要对为本书作过贡献的人表示感谢。如果不是很多人一起努力,这么厚的图书是不会出现的。我们非常感谢他们的工作。我们特别感谢为本书提供必需稿件的作者,他们为我们解决了很多疑难问题。我们并不仅仅是指可以在本书中找到的作者,还包括那些其作品没有采纳的大约60%的提交者。极高质量的提交稿件尽管加大了我们工作:的难度,但是它确保了本书的质量。
我们聘用了大量的审稿人帮助筛选提交稿件。我们把我们的理智归功于他们:Francis AndersOn, Brad Appleton, Jorge Arjona, Owen Astrannen, Ken Auer, Jeff Barcalow, Kent Beck,Mike Beedle, Steve Bercznk, Manish Bhatt, Rosana Braga, John Brant Kyle Brown, Jose Burgos,Frank BUschmann, Andy Carlson, Ian Chai. Alistair Cockbum, Jens Coldewey, James Coplien,Ward Cunningham. David Cymbala, Fonda Daniels, Dennis DeBruler, Michel DeChamplain,David Delano, Dwight Deugo, Paul Dyson, Philip Eskelin, Javier Galve, Julio 'Garcia, AlejandraGarrido, John Goodsen, Robert Hanmer, Kevlin Henney, Robert Hirschfeld, Ralph Johnson,Wolfgang Keller, Elizabeth Kendall, Norm Kerth, Charles Knutson,, Frederick Koh, PhilippeLalanda, Manfred Lange, Doug Lea, Mary Lynn Manns, Klaus Marquardt, Paul0 Masiero, SkipMcCormick, Regine Meunier. Oscar Nierstrasz, James Noble, Alan O'Callaghan, Don Olson,William Opdyke, Dorina Petriu, Irfan Pyarali, Andreas Rausch, Dirk Riehle, Linda Rising,Ant6nio Rito Silva, Don Roberts, Gustavo Rossi, Cecilia Rubira, Andreas Rfiping, DougSchmidt, Ari Sehoenfeld, Dietmar Schfitz, Christa Schwanninger, Joe Seda, Peter Sommerlad,Michael Stal, Paul Taylor, Jenifer Tidwell, Dwayne Towell, David Ungar.
我们特别感谢本系列丛书的主编John Vissides。他给了我们鼓励和必要的鞭策。Neil要特别感谢他的两位合作编辑,和你们一起工作是一种快乐。
最后,我们特别感谢支持我们一路走来的我们的家人、朋友和合作者。我们希望在你们读到这里时,我们将重新做回快乐的自己。
NeilHarrison,丹佛,科罗拉多州
BrianFoote,乌尔班纳,伊利诺伊州
HansRohnert,慕尼黑,德国