第1章 设计模式简介 1
1.1 什么是设计模式 1
1.2 设计模式的起源 2
1.3 “23个设计模式”的来源 2
1.4 学习设计模式的重要性 2
1.5 合理使用模式 3
1.6 什么是框架 4
1.7 使用Java描述模式的必要性 5
1.8 设计模式资源 5
第2章 面向对象的几个基本原则 6
2.1 面向抽象原则 6
2.2 开-闭原则 10
2.3 多用组合少用继承原则 11
2.4 高内聚-低耦合原则 12
第3章 UML类图简介 13
3.1 类 13
3.2 接口 13
3.3 泛化关系 14
3.4 关联关系 14
3.5 依赖关系 15
3.6 实现关系 15
3.7 注释 15
第4章 命令模式 16
4.1 概述 16
4.2 模式的结构与使用 17
4.3 命令接口中的撤销方法 20
4.4 宏命令 22
4.5 命令模式的优点 25
4.6 适合使用命令模式的情景 25
4.7 命令模式与Java AWT事件 25
4.8 应用举例——模拟小电器 29
第5章 观察者模式 34
5.1 概述 34
5.2 模式的结构与使用 35
5.3 观察者模式中的“推”数据与“拉”数据 39
5.4 观察者与多主题 42
5.5 观察者模式的优点 46
5.6 适合使用观察者模式的情景 46
5.7 Java API中的Observable类与Observer接口 47
5.8 应用举例——统计文本中的单词和数字 51
第6章 装饰模式 55
6.1 概述 55
6.2 模式的结构与使用 56
6.3 使用多个装饰者 60
6.4 装饰模式相对继承机制的优势 61
6.5 装饰模式的优点 62
6.6 适合使用装饰模式的情景 62
6.7 Java IO与装饰模式 62
6.8 应用举例——读取单词表 63
第7章 策略模式 66
7.1 概述 66
7.2 模式的结构与使用 68
7.3 策略模式的优点 72
7.4 适合使用策略模式的情景 72
7.5 策略模式相对继承机制的优势 73
7.6 应用举例——加密、解密文件 73
第8章 适配器模式 78
8.1 概述 78
8.2 模式的结构与使用 80
8.3 适配器模式的优点 84
8.4 适合适配器模式的情景 84
8.5 单接口适配器 85
8.6 应用举例——Iterator接口与Enumeration接口 86
第9章 责任链模式 89
9.1 概述 89
9.2 模式的结构与使用 90
9.3 责任链模式的优点 93
9.4 适合使用责任链模式的情景 94
9.5 应用举例——计算阶乘 94
第10章 外观模式 98
10.1 概述 98
10.2 模式的结构与使用 99
10.3 外观模式的优点 102
10.4 适合使用外观模式的情景 102
10.5 应用举例——解析文件 102
第11章 迭代器模式 105
11.1 概述 105
11.2 模式的结构与使用 106
11.3 迭代器的next()方法与集合的get(int index)方法 108
11.4 迭代器模式的优点 109
11.5 适合使用迭代器模式的情景 109
11.6 应用举例——使用多个集合存储对象 110
第12章 中介者模式 113
12.1 概述 113
12.2 模式的结构与使用 114
12.3 中介者模式的优点 118
12.4 适合使用中介者模式的情景 118
12.5 使用中介者模式处理组件交互 118
12.6 应用举例——模拟交通信号灯 121
第13章 工厂方法模式 127
13.1 概述 127
13.2 模式的结构与使用 128
13.3 Java集合框架与工厂模式 131
13.4 工厂方法模式的优点 132
13.5 适合使用工厂方法模式的情景 132
13.6 应用举例——创建药品对象 132
第14章 抽象工厂模式 136
14.1 概述 136
14.2 模式的结构与使用 137
14.3 工厂方法模式的优点 141
14.4 适合使用抽象工厂模式的情景 141
14.5 应用举例——存款凭证 142
第15章 生成器模式 149
15.1 概述 149
15.2 模式的结构与使用 150
15.3 生成器模式的优点 153
15.4 适合使用生成器模式的情景 154
15.5 应用举例——日历牌 154
第16章 原型模式 160
16.1 概述 160
16.2 java.lang.Objcct类的clone方法 161
16.3 Serializable接口与克隆对象 163
16.4 模式的结构与使用 164
16.5 原型模式的优点 166
16.6 适合原型模式的情景 166
16.7 应用举例——克隆容器 167
第17章 单件模式 170
17.1 概述 170
17.2 模式的结构与使用 170
17.3 单件模式的优点 173
17.4 适合单件模式的情景 173
17.5 应用举例——多线程争冠军 173
第18章 组合模式 178
18.1 概述 178
18.2 模式的结构与使用 180
18.3 组合模式的优点 184
18.4 适合组合模式的情景 185
18.5 应用举例——苹果树的重量及苹果的价值 185
第19章 桥接模式 190
19.1 概述 190
19.2 模式的结构与使用 191
19.3 桥接模式的优点 194
19.4 适合桥接模式的情景 195
19.5 应用举例——制作电视节目 195
第20章 状态模式 200
20.1 概述 200
20.2 模式的结构与使用 202
20.3 状态切换 204
20.4 共享状态 207
20.5 状态模式的优点 209
20.6 适合状态模式的情景 210
20.7 应用举例——模拟咖啡自动售货机 210
第21章 模板方法模式 215
21.1 概述 215
21.2 模式的结构与使用 216
21.3 钩子方法 219
21.4 模板方法模式的优点 222
21.5 适合模板方法模式的情景 222
21.6 应用举例——数据库的连接与记录查询 222
第22章 代理模式 228
22.1 概述 228
22.2 模式的结构与使用 229
22.3 远程代理 231
22.4 虚拟代理 235
22.5 代理模式的优点 239
22.6 适合代理模式的情景 239
22.7 应用举例——使用远程窗口阅读文件 239
第23章 享元模式 242
23.1 概述 242
23.2 模式的结构与使用 243
23.3 享元模式的优点 247
23.4 适合享元模式的情景 247
23.5 应用举例——创建化合物 248
第24章 访问者模式 251
24.1 概述 251
24.2 模式的结构与使用 252
24.3 双重分派 256
24.4 访问者模式的优点 256
24.5 适合访问模式的情景 256
24.6 应用举例——评价体检表 256
第25章 备忘录模式 261
25.1 概述 261
25.2 模式的结构与使用 262
25.3 使用内部类创建备忘录 266
25.4 备忘录模式的优点 266
25.5 适合使用备忘录模式的情景 267
25.6 应用举例——使用备忘录实现undo操作 267
第26章 解释器模式 270
26.1 概述 270
26.2 解释器模式的结构与使用 271
26.3 解释器模式的优点 272
26.4 适合使用解释器模式的情景 272
26.5 应用举例——简单的英文翻译器 273
第27章 模式分类 278
27.1 创建型模式 278
27.2 行为型模式 278
27.3 结构型模式 279
参考文献 280