本书面向有一定Java语言基础和一定编程经验的读者,重点探讨在Java程序设计中怎样使用著名的23个设计模式。本书的目的是让读者不仅学习怎样在软件设计中使用好设计模式,更重要的是让读者通过学习使用设计模式深刻地理解面向对象的设计思想,以便更好地使用面向对象语言解决设计中的诸多问题。
本书可以作为计算机相关专业高年级学生以及研究生的教材,也可以作为软件项目管理人员、软件开发工程师等专业人员的参考用书,可登录清华大学出版社网站(www.tup.tsinghua.edu.cn)下载书中的示例代码。
前言
设计模式是从许多优秀的软件系统中总结出的成功的、可复用的设计方案,已经被成功应用于许多系统的设计中。目前,面向对象程序设计已经成为软件设计开发领域的主流,而学习使用设计模式无疑非常有助于软件开发人员使用面向对象语言开发出易维护、易扩展、易复用的代码。本书面向有一定Java语言基础和一定编程经验的读者,重点探讨在Java程序设计中怎样使用著名的“23个设计模式”。本书的目的是让读者不仅学习怎样在软件设计过程中使用好设计模式,更重要的是让读者通过学习深刻地理解面向对象的设计思想,以便更好地使用面向对象语言解决设计中的诸多问题。
本书共27章,前3章为学习设计模式的一些必要知识,第4至第26章探讨、讲解“23个设计模式”,最后一章为模式分类。第1章简单介绍模式的基本概念、起源以及学习设计模式的基本方法。第2章为面向对象的一些基本原则,了解这些基本原则,有助于理解后续章节中的模式。第3章简单介绍了UML中的类图。第4至第26章的每章都包含四部分重要的内容,第一部分为一个概述,用易于理解的问题讲解使用模式的动机;第二部分是模式的结构,在这部分用一个易于理解的示例讲解模式的结构;第三部分阐述模式的优点和使用场景;第四部分结合实际问题,使用设计模式给出一个有一定难度和实用价值的示例。
为了说明一个模式的核心实质,本书精心研究了针对每个模式的示例,以便让读者结合这样的示例能更好地理解和使用模式。本书的全部示例由作者编写完成,并在JDK 1.6环境下编译通过。可登录清华大学出版社网站(www.tup.tsinghua.edu.cn)下载书中的示例代码,本书示例代码及相关内容仅供学习Java设计模式使用,不得以任何方式抄袭出版。
希望本书能对读者学习和使用设计模式有所帮助,并请读者批评指正。
编者2009年3月
目录
第1章设计模式简介
1.1什么是设计模式
1.2设计模式的起源
1.3“23个设计模式”的来源
1.4学习设计模式的重要性
1.5合理使用模式
1.6什么是框架
1.7使用Java描述模式的必要性
1.8设计模式资源
第2章面向对象的几个基本原则
2.1面向抽象原则
2.2开闭原则
2.3多用组合少用继承原则
2.4高内聚低耦合原则
第3章UML类图简介
3.1类
3.2接口
3.3泛化关系
3.4关联关系
3.5依赖关系
3.6实现关系
3.7注释
第4章命令模式
4.1概述
4.2模式的结构与使用
4.3命令接口中的撤销方法
4.4宏命令
4.5命令模式的优点
4.6适合使用命令模式的情景
4.7命令模式与Java AWT事件
4.8应用举例——模拟小电器
目录
Java设计模式
第5章观察者模式
5.1概述
5.2模式的结构与使用
5.3观察者模式中的“推”数据与“拉”数据
5.4观察者与多主题
5.5观察者模式的优点
5.6适合使用观察者模式的情景
5.7Java API中的Observable类与Observer接口
5.8应用举例——统计文本中的单词和数字
第6章装饰模式
6.1概述
6.2模式的结构与使用
6.3使用多个装饰者
6.4装饰模式相对继承机制的优势
6.5装饰模式的优点
6.6适合使用装饰模式的情景
6.7Java IO与装饰模式
6.8应用举例——读取单词表
第7章策略模式
7.1概述
7.2模式的结构与使用
7.3策略模式的优点
7.4适合使用策略模式的情景
7.5策略模式相对继承机制的优势
7.6应用举例——加密、解密文件
第8章适配器模式
8.1概述
8.2模式的结构与使用
8.3适配器模式的优点
8.4适合适配器模式的情景
8.5单接口适配器
8.6应用举例——Iterator接口与Enumeration接口
第9章责任链模式
9.1概述
9.2模式的结构与使用
9.3责任链模式的优点
9.4适合使用责任链模式的情景
9.5应用举例——计算阶乘
第10章外观模式
10.1概述
10.2模式的结构与使用
10.3外观模式的优点
10.4适合使用外观模式的情景
10.5应用举例——解析文件
第11章迭代器模式
11.1概述
11.2模式的结构与使用
11.3迭代器的next()方法与集合的get(int index)方法
11.4迭代器模式的优点
11.5适合使用迭代器模式的情景
11.6应用举例——使用多个集合存储对象
第12章中介者模式
12.1概述
12.2模式的结构与使用
12.3中介者模式的优点
12.4适合使用中介者模式的情景
12.5使用中介者模式处理组件交互
12.6应用举例——模拟交通信号灯
第13章工厂方法模式
13.1概述
13.2模式的结构与使用
13.3Java集合框架与工厂模式
13.4工厂方法模式的优点
13.5适合使用工厂方法模式的情景
13.6应用举例——创建药品对象
第14章抽象工厂模式
14.1概述
14.2模式的结构与使用
14.3工厂方法模式的优点
14.4适合使用抽象工厂模式的情景
14.5应用举例——存款凭证
第15章生成器模式
15.1概述
15.2模式的结构与使用
15.3生成器模式的优点
15.4适合使用生成器模式的情景
15.5应用举例——日历牌
第16章原型模式
16.1概述
16.2java.lang.Object类的clone方法
16.3Serializable接口与克隆对象
16.4模式的结构与使用
16.5原型模式的优点
16.6适合原型模式的情景
16.7应用举例——克隆容器
第17章单件模式
17.1概述
17.2模式的结构与使用
17.3单件模式的优点
17.4适合单件模式的情景
17.5应用举例——多线程争冠军
第18章组合模式
18.1概述
18.2模式的结构与使用
18.3组合模式的优点
18.4适合组合模式的情景
18.5应用举例——苹果树的重量及苹果的价值
第19章桥接模式
19.1概述
19.2模式的结构与使用
19.3桥接模式的优点
19.4适合桥接模式的情景
19.5应用举例——制作电视节目
第20章状态模式
20.1概述
20.2模式的结构与使用
20.3状态切换
20.4共享状态
20.5状态模式的优点
20.6适合状态模式的情景
20.7应用举例——模拟咖啡自动售货机
第21章模板方法模式
21.1概述
21.2模式的结构与使用
21.3钩子方法
21.4模板方法模式的优点
21.5适合模板方法模式的情景
21.6应用举例——数据库的连接与记录查询
第22章代理模式
22.1概述
22.2模式的结构与使用
22.3远程代理
22.4虚拟代理
22.5代理模式的优点
22.6适合代理模式的情景
22.7应用举例——使用远程窗口阅读文件
第23章享元模式
23.1概述
23.2模式的结构与使用
23.3享元模式的优点
23.4适合享元模式的情景
23.5应用举例——创建化合物
第24章访问者模式
24.1概述
24.2模式的结构与使用
24.3双重分派
24.4访问者模式的优点
24.5适合访问模式的情景
24.6应用举例——评价体检表
第25章备忘录模式
25.1概述
25.2模式的结构与使用
25.3使用内部类创建备忘录
25.4备忘录模式的优点
25.5适合使用备忘录模式的情景
25.6应用举例——使用备忘录实现undo操作
第26章解释器模式
26.1概述
26.2解释器模式的结构与使用
26.3解释器模式的优点
26.4适合使用解释器模式的情景
26.5应用举例——简单的英文翻译器
第27章模式分类
27.1创建型模式
27.2行为型模式
27.3结构型模式
参考文献