本书并不是一本介绍面向对象技术或设计的书,目前已有不少好书介绍面向对象技术或设计。本书假设你至少已经比较熟悉一种面向对象编程语言,并且有一定的面向对象设计经验。当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不是迫不及待地翻阅手头的字典。 另外,这也不是一篇高级专题技术论文,而是一本关于设计模式的书,它描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。设计模式捕获了随时间进化与发展的问题的求解方法,因此它们并不是人们从一开始就采用的设计方案。它们反映了不为人知的重新设计和重新编码的成果,而这些都来自软件开发者为了设计出灵活、可复用的软件而长时间进行的艰苦努力。设计模式捕获了这些解决方案,并用简洁易用的方式表达出来。 设计模式并不要求使用独特的语言特性,也不采用那些足以使你的朋友或老板大吃一惊的神奇的编程技巧。所有的模式均可以用标准的面向对象语言实现,这也许有时会比特殊的解法多费一些功夫,但是为了增加软件的灵活性和可复用性,多做些工作是值得的。 一旦理解了设计模式并且有了一种“Aha!”(而不是“Huh?”)的应用经验和体验后,你将用一种非同寻常的方式思考面向对象设计。你将拥有一种深刻的洞察力,以帮助你设计出更加灵活的、模块化的、可复用的和易理解的软件—这也是你着迷于面向对象技术的原因,不是吗? 当然还有一些提示和鼓励:第一次阅读此书时你可能不会完全理解它,但不必着急,我们在起初编写这本书时也没有完全理解它们!请记住,这不是一本读完一遍就可以束之高阁的书。我们希望你在软件设计过程中反复参阅此书,以获取设计灵感。 我们并不认为这组设计模式是完整的和一成不变的,它只是我们目前对设计的思考的记录。因此我们欢迎广大读者的批评与指正,无论书中采用的实例、参考,还是我们遗漏的已知应用,或应该包含的设计模式等。你可以通过Addison-Wesley写信给我们,或发送电子邮件到design-patterns@csuiucedu。你还可以通过发送邮件“send design pattern source”到design-patterns-source@csuiucedu获取书中的示例代码部分的源代码。 另外我们有一个专门的网页报道最新的消息与更新:http://st-wwwcsuiucedu/users/patterns/DPBook/DPBookhtml。 E G 于加州Mountain View R H 于蒙特利尔 R J 于伊利诺伊Urbana J V 于纽约 Hawthorne 1994年8月
埃里克·伽玛(Erich Gamma) 在瑞士苏黎世大学获得计算机科学博士学位。他与Kent Beck合作开发了单元测试框架JUnit,并领导了Eclipse Java Development Tools项目。他还曾是IBM Rational Jazz项目的主要成员。2011年,Gamma以杰出工程师(Distinguished Engineer)的身份加入微软Visual Studio团队,领导微软位于瑞士苏黎世的实验室。 理查德·赫尔姆(Richard Helm) 在澳大利亚墨尔本大学获得计算机科学博士学位,曾在IBM T J Watson担任研究员,并在澳大利亚开创了IBM面向对象技术研究分部。 拉尔夫·约翰逊(Ralph Johnson) 在美国康奈尔大学获得计算机科学博士学位,伊利诺伊大学教授,在模式、重构等领域均有很高造诣。 约翰·威利斯迪斯(John Vlissides) 在美国斯坦福大学获得计算机科学博士学位,是IBM T J Watson研究中心的研究员。
1 Introduction 1
11 WhatIs a Design Pattern? 2
1 2 Design Patterns in Smalltalk MVC 4
13 Describing Design Patterns 6
14 The Catalog of Design Patterns 8
15 Organizing the Catalog 9
16 How Design Patterns Solve Design Problems 11
17 Howto Selecta Design Pattern 28
18 Howto Use a Design Pattern 29 2 A Case Study: Designing a Document Editor 33 2 1 Design Problems 33 22 Document Structure 35 23 Formatting ~ 40 24 Embellishing the User Interface 43 25 Supporting Multiple Look-and-Feel Standards 47 26 Supporting Multiple Window Systems 51 27 User Operations 58 28 Spelling Checking and Hyphenation 64 29 Summary 76 Design Pattern Catalog 79 3 Creational Patterns 81 Abstract Factory 87 Builder 97 Factory Method 107 Prototype 117 Singleton 127 Discussion of Creational Patterns 135 4 Structural Patterns 137 Adapter 139 Bridge 151 Composite 163 Decorator 175 Facade 185 Flyweight 195 Proxy 207 Discussion of Structural Patterns 219 5 Behavioral Patterns 221 Chain of Responsibility 223 Command 233 Interpreter 243 Iterator 257 Mediator 273 Memento 283 Observer 293 State 305 Strate~v 315 Template Method 325 Visitor