首页>参考读物>计算机科学与技术>软件工程及软件方法学

设计模式Java手册
作者 : Steven John Metsker
译者 : 龚波 冯军 程群梅 等
出版日期 : 2006-03-21
ISBN : 7-111-18395-9
定价 : 45.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 322
开本 : 16开
原书名 : Design Patterns Java Workbook
原出版社: Addison-Wesley
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书透彻讲解了经典的《设计模式:可复用面向对象软件的基础》一书涵盖的23种基本设计模式。本书将这些设计模式分成五类:接口型模式、责任型模式、构造型模式、操作型模式、以及扩展型模式。书中对各个模式进行详细的讲解,并借助UML图例和Java代码来演示这些模式的应用方法,另外还提供了一些实用的例子及有关设计模式的习题、思考题,以启迪读者的思路,使读者在边做边学中提高应用设计模式的实践能力。通过阅读此书,读者将能够掌握以下技术:
  ● 修改领域数据以适应Swing组件
  ● 为Swing创建外观模式
  ● 处理组合结构中的递归
  ● 理解桥接模式在Java数据库连接中的角色
  ● 将模型/视图/控制器和观察者模式结合起来
  ● 用中介对象来维护关系的完整性
  ● 使用代理来完成计算机间的通信
  ● 让服务提供者决定该实例化哪个类
  ● 应用备忘录模式来支持撤销操作
  ● 利用克隆来创建原型
  ● 应用命令模式来提供服务
  ● 开发线程安全的迭代器
  ● 应用装饰器模式和访问者模式来扩展类

  本书的后面给出了各章节“自我突破”思考题的参考答案。读者可以先经过思考给出自己的答案,然后再与书后的参考答案作比较,这样读者将能够充分理解设计模式在Java应用程序开发中的角色,并能够提高自己在实际工作中应用设计模式的能力。

图书特色

图书前言

2000年,在Minnesota Minneapolis举办的OOPSLA上,我曾经咨询过Addison Wesley的Mike Hendrickson并问他他认为读者想要什么类型的书。当我听他说目前设计模式方面的图书仍有广阔的市场的时候,我对此很感兴趣,并向他提出应该有一本Java手册来帮助读者加深和体验他们对模式的理解。Mike认为这个想法很好,并把我介绍给Paul Becker。Paul Becker负责Addison Wesley软件模式系列的图书。Mike的第一反应是“在五年之前就应出这种书”。我非常感谢Mike和Paul早期给予我的鼓励,是他们启发我写了这样一本书。
  自从那次初次会面之后,在这本书的写作过程中,Paul一直给予我大力的支持,直到这本书出版。在这个项目的早期,Paul曾邀请软件模式系列图书的编辑John Vlissides一起审查这个图书项目。John评价说Paul应该全力支持这个项目。在后来的写书过程中,John的话深深地印在了我的脑海中。
  John Vlissides当然也是《设计模式》一书的四个作者之一。John与其他合作者—Erich Gamma,Ralph Johnson,以及Richard Helm—写的那本书完全是本书的基石。在写书的过程中,我几乎每天都要参考《设计模式》一书,我一点儿也没有夸大那本书的作用。
  另外,我还参考了其他许多书籍,本书后面的参考文献分别将它们一一列出。特别值得一提的是,我参考了《The Unified Modeling Language User Guide》(Booch,Rumbaugh,and Jacobson 1999,中文版《UML用户指南》已由机械工业出版社引进出版—编注)一书,阅读了其中对UML的详细解释。为了准确地描述Java相关内容,我几乎每天都参考了《JavaTM in a Nutshell》(Flanagan 1999b)一书。另外,我还参考了《Patterns in JavaTM》(Grand 1998)和《JavaTM Design Patterns》(Cooper 2000)这两本书。
  在写书的这几个月里,我还在一家金融服务机构工作。该机构在许多地方都有分部。当这本书初稿完成的时候,我开了一门指导课程,专门以这本书为教材。当时,我在Richmond和Virginia教这门课程;而我的同事Tim Snyder和Bill Trudell在其他地方教这门课程。我想在这里谢谢我的这两位同事以及听过这门课的学生们,谢谢他们给予了我灵感,也谢谢他们将自己的见解告诉我。特别地,我还要感谢Srinivasarao Katepalli、Brad Hughes、Thiaga Manian、Randy Fields、Macon Pegram、Joe Paulchell、Ron DiFrango、Ritch Linklater、Patti Richards以及Ben Lewis,谢谢他们给予我的帮助和建议。我要感谢我的朋友Bill Wake和Gagan Kanjlia在写作早期帮我审阅这本书,以及Kiran Raghunathan在写作后期给予我帮助。最后,我还要感谢我的朋友Jeff Damukaitis,他给了我一些不错的建议。
  在这本书的写作过程中,Paul Becker安排了许多出色的评审老师来指导我写作。我要再次感谢John Vlissides对这本书的审阅。他每次审阅总能指出需要改进的关键之处,我看得出他是真的喜欢这本书。我要感谢Luke Hohmann,Bob Hanmer,Robert Martin,以及Joshua Kerievsky等人,他们在不同阶段帮助过我,是他们的努力使得这本书更好。我要感谢Joshua Engel,他总是能以一种温文尔雅的方式来表达自己尖锐的观点。最后,我要感谢Rebecca Wirfs-Brock,他给了我许多非常有价值的建议,包括建议我重新组织本书。在写书伊始,我并没有特意将那些重要且易于理解的模式安排在书的前面。正是听从了Rebecca的建议以及在本书所有审阅者的帮助下,这本书才变得更加出色。

Steve Metsker(Steve.Metsker@acm.org)

封底文字

图书序言

告诉我,我可能转眼就忘;教我,我会牢记在心;参与其中,我才能心领神会。
                       -—本杰明·富兰克林

  在本书中,Steve John Metsker为读者提供了非常丰富的有关设计模式的内容:书中不仅讲述了设计模式,还为读者提供了大量的代码实例,以及许多的思考题;完成这些思考题将帮助读者更加深入地理解设计模式。本书中的代码用于一家虚构的焰火制品公司,该公司除了生产销售焰火制品以外还对外提供焰火表演服务。这些代码实例比起以往常用的ATM机器的例子有趣多了;而且,读者在学习设计模式的过程中还可以了解有关焰火制品的知识。这本书不仅诱人而且有趣!另外,由于本书还描述了每种设计模式是如何应用于并扩展Java语言结构的,因而读者通过阅读此书还可以深入了解Java语言!
  模式就是做事的方法,亦即实现某个目标的途径。设计模式就是利用面向对象技术实现某个目标的方法。该技术包括类,方法,继承,以及接口。每种模式都被概括为一个名字。如果同事之间都了解设计模式,那么他们的工作效率将会更高—因为他们都熟悉这些词汇,交流起来就会更加容易!这样开发人员之间就可以自由地讨论他们的意图,而不再苦于找不到合适的词汇用于交流。而对于那些习惯于应用设计模式的开发人员而言,有了通用的模式术语之后,他们的代码将会变得更加灵活,更加便于阅读和修改。
  更早之前,Erich Gamma 及其同事曾写了一书描述设计模式的书,书名叫《Design Patterns》(Addison Wesley,1995,中文版《设计模式:可复用面向对象软件的基础》已由机械工业出版社出版—编注)。那本书深入介绍了23种已经过验证的构建和操作对象的设计模式。而本书则从Java程序员的角度清晰地解释了这23种设计模式。
  在完成本书提供的自我突破思考题的过程中,读者会编写代码,扩展现有的代码,回答一些微妙的问题,以及解决软件设计过程中遇到的典型问题;通过对这些思考题的思索,读者将获得足够的机会来深化自己对设计模式的理解。不过,不论读多少书,学习知识的最佳方式是将其应用于实践。

Rebecca Wirfs-Brock
Sherwood 于俄勒冈州
2002年1月

作者简介

Steven John Metsker:Steven John Metsker: Steven John Metsker 是一位软件开发领域的学者,也是该领域的作家。他的著作多以面向对象技术为主题,旨在帮助开发人员构建出结构清晰功能强大的软件。他发表的文章或出版的书籍常涉及:对象模型中的关系完整性,Java逻辑难题的解答,以及对象 概念在Plato语言与OO语言中的区别。Steve的另一部著作是《Building Parsers with Java》。

译者简介

龚波 冯军 程群梅 等:暂无简介

译者序

具体而言,设计模式就是利用面向对象技术解决特定环境中的问题的方法。它是整个软件开发行业不断积累的集体智慧的结晶。应用设计模式将有助于软件开发人员开发出逻辑清晰、架构合理、可重用性高的代码。同时,研究设计模式也方便软件开发人员交流软件及模块设计的经验和心得。目前,设计模式在软件开发过程中的作用已得到普遍的认可,学习和研究设计模式已成为各个层面软件开发人员的必修课。
  本书借助Java语言为读者讲解了GoF的全部23种设计模式。本书把这23种设计模式组织成五类:接口型模式,责任型模式,构造型模式,操作型模式以及扩展型模式。本书分五个部分细致讲解了这五类设计模式。
  每个部分的开头一章都会介绍Java语言内在支持的各种技术,以及这些技术的不足;随后各章将会对本类各个模式进行详细的讲解,通过列举一些应用实例,借助UML图例和Java代码来演示这些模式的应用方法,同时,本书还为读者留下了一些编程或设计方面的思考题来帮助读者举一反三。
  本书的附录A为读者学习设计模式给出了一些具体建议。附录B给出了本书中思考题的参考答案。这些参考答案只是给了一种合理的解决方法,而不是唯一的。读者可以先经过思考给出自己的答案,然后再与书后的参考答案作比较。附录C简要描述了UML建模语言。之前不了解UML的读者在阅读了这节内容之后就可以看懂本书中的UML图例。
  实践出真知!本书的最大特点就是便于边学边做。我们期望读者在阅读此书的时候也能够做到边学边做,这样才能加深自己对设计模式的理解,提高自己应用设计模式的能力。
  在本书的翻译过程中,龚波、冯军和程群梅作出了最大的贡献,其他对本书翻译给予热情指导的还有:熊杰颍、李红玲、严亚军、陈蓓、易向东、徐小梅、张文敏等人,感谢他们的热心帮助和大力支持。
  我们欢迎读者朋友将自己的意见和建议及时反馈给我们,通过电子邮件发送至 wfstudio@vip.sina.com。我们乐意和您一起探讨设计模式相关技术问题,共同进步。

推荐序

图书目录

第1章  模式概述 1
1.1  为什么使用模式 1
1.2  为什么要应用设计模式 3
1.3  为什么使用Java 4
1.4  为什么使用UML 4
1.5  为什么说本书是一本手册 4
1.6  本书的组织方式 5
1.7  欢迎来到Oozinoz公司 6
1.8  源代码免责声明 6
1.9  小结 6

第一部分  接口型模式
第2章  接口型模式介绍 9
2.1  普通的接口 9
2.2  接口和责任 10
2.3  在接口中加入常量 11
2.4  小结 13
2.5  普通接口无法提供的内容 13
第3章  适配器模式 15
3.1  在适配之前需要深谋远虑 15
3.2  类适配器和对象适配器 18
3.3  无法预料的适配 22
3.4  识别适配器模式 23
3.5  小结 24
第4章  外观模式 25
4.1  重构为外观模式 25
4.2  外观类、工具类以及示例类 33
4.3  小结 34
第5章  组合模式 35
5.1  常见的组合模式 35
5.2  组合模式中的递归特性 36
5.3  图论中的树 37
5.4  含有环的组合对象模型 40
5.5  环状组合对象模型的特点 43
5.6  小结 44
第6章  桥接模式 45
6.1  桥接模式的典型例子:驱动程序 45
6.2  重构为桥接模型 48
6.3  使用List接口的桥接模式 49
6.4  小结 50

第二部分  责任型模式
第7章  介绍责任型模式 55
7.1  普通的责任 55
7.2  通过设置可见性来控制责任 56
7.3  小结 57
7.4  普通责任无法提供的内容 57
第8章  单体模式 59
8.1  单体模式的机制 59
8.2  单体模式与线程 60
8.3  识别单体模式 61
8.4  小结 62
第9章  观察者模式 63
9.1  一个典型的例子:Swing中的观察者模式 63
9.2  模型/视图/控制器 66
9.3  维护Observable类对象 69
9.4  小结 70
第10章  中介者模式 72
10.1  一个典型的例子:GUI中介者 72
10.2  利用中介者模式管理关系完整性 75
10.3  小结 78
第11章  代理模式 79
11.1  一个典型的例子:图像代理 79
11.2  重新审议后的图像代理 82
11.3  远程代理 84
11.4  小结 89
第12章  责任链模式 90
12.1  不同的查询机制 90
12.2  重构为责任链模式 90
12.3  固定责任链 92
12.4  不带组合结构的责任链模式 94
12.5  小结 94
第13章  享元模式 95
13.1  认识享元模式 95
13.2  不变性 95
13.3  提取享元中不可变的部分 96
13.4  共享享元 97
13.5  小结 100

第三部分  构造型模式
第14章  构造型模式介绍 103
14.1  普通的构造 103
14.2  与超类合作 103
14.3  类内部的合作 104
14.4  小结 105
14.5  普通构造无法提供的内容 105
第15章  生成器模式 107
15.1  根据解析器构造对象 107
15.2  根据约束构造对象 108
15.3  根据不完整的信息构造符合约束的对象 110
15.4  小结 111
第16章  工厂方法 112
16.1  识别工厂方法模式 112
16.2  工厂方法模式的一个典型例子:迭代器 113
16.3  决定要实例化的类 114
16.4  并行层次结构中的工厂方法模式 115
16.5  小结 117
第17章  抽象工厂模式 118
17.1  抽象工厂用于构建一系列对象 118
17.2  包和抽象工厂模式 121
17.3  抽象工厂模式和“外观与感觉” 121
17.4  小结 123
第18章  原型模式 124
18.1  作为工厂的原型 124
18.2  利用克隆进行原型化 125
18.3  使用Object.clone( )方法 127
18.4  小结 129
第19章  备忘录模式 131
19.1  备忘录的持久性 131
19.2  应用备忘录模式 131
19.3  跨越会话的持久性备忘录 133
19.4  使用字符串作为备忘录 135
19.5  小结 136

第四部分  操作型模式
第20章  操作型模式介绍 139
20.1  操作、方法和算法 139
20.2  方法的机制 140
20.3  方法中的异常 142
20.4  小结 143
20.5  普通操作无法提供的内容 143
第21章  模板方法模式 144
21.1  模板方法的一个典型例子:排序 144
21.2  完成一个算法 146
21.3  模板方法中的钩子 148
21.4  重构为模板方法 149
21.5  小结 150
第22章  状态模式 151
22.1  对状态建模 151
22.2  重构为状态模式 154
22.3  使状态成为常量 157
22.4  小结 158
第23章  策略模式 159
23.1  对策略建模 159
23.2  重构为策略模式 161
23.3  策略模式和状态模式的比较 165
23.4  策略模式和模板方法模式的比较 165
23.5  小结 165
第24章  命令模式 167
24.1  一个典型的例子:菜单命令 167
24.2  利用命令模式提供服务 169
24.3  命令模式与其他模式的关系 170
24.4  小结 173
第25章  解释器模式 174
25.1  解释器模式的一个例子 174
25.2  解释器、语言以及解析器 181
25.3  小结 182

第五部分  扩展型模式
第26章  扩展型模式介绍 185
26.1  能重用的时候不必扩展 185
26.2  通过派生进行扩展 189
26.3  Liskov替换原则(LSP) 190
26.4  通过委托进行扩展 192
26.5  小结 193
26.6  普通扩展无法提供的内容 194
第27章  装饰器模式 195
27.1  装饰器模式的典型例子:流 195
27.2  函数装饰器 201
27.3  不使用装饰器模式的装饰 209
27.4  小结 211
第28章  迭代器模式 212
28.1  类型安全的集合 212
28.2  对组合类进行迭代 215
28.3  线程安全的迭代器 224
28.4  小结 228
第29章  访问者模式 229
29.1  重构以支持访问者模式 229
29.2  应用访问者模式进行扩展 230
29.3  访问者模式中的循环 234
29.4  有关访问者模式的争论 237
29.5  小结 238

第六部分  附   录
附录A  使用指南 243
附录B “自我突破”参考答案 246
附录C  UML概览 308
术语表 313
参考文献 319

教学资源推荐
作者: 韩万江 姜立新 等编著 宋茂强 审
作者: Bob Hughes;Mike Cotterell
作者: Leszek A.Maciaszek Bruc Lee Liong
作者: [美]罗杰 S.普莱斯曼(Roger S. Pressman) 布鲁斯 R. 马克西姆(Bruce R. Maxim) 著
参考读物推荐
作者: Alan Shalloway, James R.Trott
作者: [美] 迪恩·莱芬韦尔(Dean Leffingwell)等著
作者: (美)Cem Kaner,James Bach,Bret Pettichord