第1章 设计模式概述 1
1.1 设计模式的诞生与发展 1
1.1.1 模式的诞生与定义 1
1.1.2 软件模式概述 3
1.1.3 设计模式的发展 3
1.2 设计模式的定义与分类 4
1.2.1 设计模式的定义 4
1.2.2 设计模式的基本要素 5
1.2.3 设计模式的分类 6
1.3 GoF设计模式简介 7
1.4 设计模式的优点 9
1.5 本章小结 9
1.6 习题 10
第2章 面向对象设计原则 11
2.1 面向对象设计原则概述 11
2.2 单一职责原则 12
2.3 开闭原则 13
2.4 里氏代换原则 14
2.5 依赖倒转原则 15
2.6 接口隔离原则 17
2.7 合成复用原则 18
2.8 迪米特法则 20
2.9 本章小结 22
2.10 习题 23
第3章 简单工厂模式 25
3.1 创建型模式 25
3.2 简单工厂模式概述 26
3.3 简单工厂模式的结构与实现 27
3.3.1 简单工厂模式的结构 27
3.3.2 简单工厂模式的实现 28
3.4 简单工厂模式的应用实例 29
3.5 创建对象与使用对象 34
3.6 简单工厂模式的简化 36
3.7 简单工厂模式的优缺点与适用环境 37
3.7.1 简单工厂模式的优点 37
3.7.2 简单工厂模式的缺点 37
3.7.3 简单工厂模式的适用环境 37
3.8 本章小结 38
3.9 习题 38
第4章 工厂方法模式 40
4.1 工厂方法模式概述 40
4.2 工厂方法模式的结构与实现 41
4.2.1 工厂方法模式的结构 41
4.2.2 工厂方法模式的实现 42
4.3 工厂方法模式的应用实例 43
4.4 配置文件与反射 46
4.5 工厂方法的重载 48
4.6 工厂方法的隐藏 49
4.7 工厂方法模式的优缺点与适用环境 51
4.7.1 工厂方法模式的优点 51
4.7.2 工厂方法模式的缺点 51
4.7.3 工厂方法模式的适用环境 52
4.8 本章小结 52
4.9 习题 52
第5章 抽象工厂模式 54
5.1 产品等级结构与产品族 54
5.2 抽象工厂模式概述 55
5.3 抽象工厂模式的结构与实现 56
5.3.1 抽象工厂模式的结构 56
5.3.2 抽象工厂模式的实现 56
5.4 抽象工厂模式的应用实例 58
5.5 开闭原则的倾斜性 64
5.6 抽象工厂模式的优缺点与适用环境 65
5.6.1 抽象工厂模式的优点 65
5.6.2 抽象工厂模式的缺点 65
5.6.3 抽象工厂模式的适用环境 66
5.7 本章小结 66
5.8 习题 67
第6章 建造者模式 69
6.1 建造者模式概述 69
6.2 建造者模式的结构与实现 70
6.2.1 建造者模式的结构 70
6.2.2 建造者模式的实现 71
6.3 建造者模式的应用实例 74
6.4 指挥者类的深入讨论 80
6.5 建造者模式的优缺点与适用环境 83
6.5.1 建造者模式的优点 84
6.5.2 建造者模式的缺点 84
6.5.3 建造者模式的适用环境 84
6.6 本章小结 84
6.7 习题 85
第7章 原型模式 86
7.1 原型模式概述 86
7.2 原型模式的结构与实现 87
7.2.1 原型模式的结构 87
7.2.2 浅克隆与深克隆 88
7.2.3 原型模式的实现 89
7.3 原型模式的应用实例 92
7.4 原型管理器 96
7.5 原型模式的优缺点与适用环境 97
7.5.1 原型模式的优点 97
7.5.2 原型模式的缺点 97
7.5.3 原型模式的适用环境 97
7.6 本章小结 98
7.7 习题 98
第8章 单例模式 100
8.1 单例模式概述 100
8.2 单例模式的结构与实现 101
8.2.1 单例模式的结构 101
8.2.2 单例模式的实现 102
8.3 单例模式的应用实例 103
8.4 饿汉式单例与懒汉式单例 106
8.5 单例模式的优缺点与适用环境 108
8.5.1 单例模式的优点 108
8.5.2 单例模式的缺点 109
8.5.3 单例模式的适用环境 109
8.6 本章小结 109
8.7 习题 109
第9章 适配器模式 111
9.1 结构型模式 111
9.2 适配器模式概述 112
9.3 适配器模式的结构与实现 113
9.3.1 适配器模式的结构 113
9.3.2 适配器模式的实现 114
9.4 适配器模式的应用实例 115
9.5 缺省适配器模式 120
9.6 双向适配器 121
9.7 适配器模式的优缺点与适用环境 122
9.7.1 适配器模式的优点 122
9.7.2 适配器模式的缺点 123
9.7.3 适配器模式的适用环境 123
9.8 本章小结 123
9.9 习题 124
第10章 桥接模式 126
10.1 桥接模式概述 126
10.2 桥接模式的结构与实现 127
10.2.1 桥接模式的结构 127
10.2.2 桥接模式的实现 128
10.3 桥接模式的应用实例 130
10.4 桥接模式与适配器模式联用 136
10.5 桥接模式的优缺点与适用环境 136
10.5.1 桥接模式的优点 137
10.5.2 桥接模式的缺点 137
10.5.3 桥接模式的适用环境 137
10.6 本章小结 137
10.7 习题 138
第11章 组合模式 140
11.1 组合模式概述 140
11.2 组合模式的结构与实现 141
11.2.1 组合模式的结构 141
11.2.2 组合模式的实现 142
11.3 组合模式的应用实例 144
11.4 透明组合模式与安全组合模式 150
11.5 组合模式的优缺点与适用环境 151
11.5.1 组合模式的优点 151
11.5.2 组合模式的缺点 151
11.5.3 组合模式的适用环境 152
11.6 本章小结 152
11.7 习题 152
第12章 装饰模式 154
12.1 装饰模式概述 154
12.2 装饰模式的结构与实现 155
12.2.1 装饰模式的结构 155
12.2.2 装饰模式的实现 156
12.3 装饰模式的应用实例 158
12.4 透明装饰模式与半透明装饰模式 162
12.5 装饰模式的优缺点与适用环境 164
12.5.1 装饰模式的优点 164
12.5.2 装饰模式的缺点 165
12.5.3 装饰模式的适用环境 165
12.6 本章小结 165
12.7 习题 166
第13章 外观模式 168
13.1 外观模式概述 168
13.2 外观模式的结构与实现 170
13.2.1 外观模式的结构 170
13.2.2 外观模式的实现 170
13.3 外观模式的应用实例 171
13.4 抽象外观类 175
13.5 外观模式的优缺点与适用环境 179
13.5.1 外观模式的优点 179
13.5.2 外观模式的缺点 179
13.5.3 外观模式的适用环境 179
13.6 本章小结 180
13.7 习题 180
第14章 享元模式 182
14.1 享元模式概述 182
14.2 享元模式的结构与实现 183
14.2.1 享元模式的结构 183
14.2.2 享元模式的实现 184
14.3 享元模式的应用实例 186
14.4 有外部状态的享元模式 190
14.5 单纯享元模式和复合享元模式 192
14.6 享元模式的优缺点与适用环境 193
14.6.1 享元模式的优点 193
14.6.2 享元模式的缺点 194
14.6.3 享元模式的适用环境 194
14.7 本章小结 194
14.8 习题 195
第15章 代理模式 196
15.1 代理模式概述 196
15.2 代理模式的结构与实现 197
15.2.1 代理模式的结构 197
15.2.2 代理模式的实现 198
15.3 代理模式的应用实例 199
15.4 远程代理 204
15.5 虚拟代理 204
15.6 缓冲代理 205
15.7 代理模式的优缺点与适用环境 207
15.7.1 代理模式的优点 207
15.7.2 代理模式的缺点 207
15.7.3 代理模式的适用环境 207
15.8 本章小结 208
15.9 习题 208
第16章 职责链模式 210
16.1 行为型模式 210
16.2 职责链模式概述 212
16.3 职责链模式的结构与实现 213
16.3.1 职责链模式的结构 213
16.3.2 职责链模式的实现 213
16.4 职责链模式的应用实例 215
16.5 纯与不纯的职责链模式 221
16.6 职责链模式的优缺点与适用环境 222
16.6.1 职责链模式的优点 222
16.6.2 职责链模式的缺点 222
16.6.3 职责链模式的适用环境 222
16.7 本章小结 223
16.8 习题 223
第17章 命令模式 225
17.1 命令模式概述 225
17.2 命令模式的结构与实现 226
17.2.1 命令模式的结构 226
17.2.2 命令模式的实现 227
17.3 命令模式的应用实例 228
17.4 实现命令队列 233
17.5 记录请求日志 234
17.6 实现撤销操作 235
17.7 宏命令 238
17.8 命令模式的优缺点与适用环境 238
17.8.1 命令模式的优点 239
17.8.2 命令模式的缺点 239
17.8.3 命令模式的适用环境 239
17.9 本章小结 239
17.10 习题 240
第18章 解释器模式 242
18.1 解释器模式概述 242
18.2 文法规则和抽象语法树 243
18.3 解释器模式的结构与实现 244
18.3.1 解释器模式的结构 244
18.3.2 解释器模式的实现 245
18.4 解释器模式的应用实例 247
18.5 解释器模式的优缺点与适用环境 253
18.5.1 解释器模式的优点 253
18.5.2 解释器模式的缺点 254
18.5.3 解释器模式的适用环境 254
18.6 本章小结 254
18.7 习题 255
第19章 迭代器模式 256
19.1 迭代器模式概述 256
19.2 迭代器模式的结构与实现 257
19.2.1 迭代器模式的结构 257
19.2.2 迭代器模式的实现 258
19.3 迭代器模式的应用实例 260
19.4 使用内部类实现迭代器 265
19.5 .NET内置迭代器 267
19.6 迭代器模式的优缺点与适用环境 269
19.6.1 迭代器模式的优点 270
19.6.2 迭代器模式的缺点 270
19.6.3 迭代器模式的适用环境 270
19.7 本章小结 270
19.8 习题 271
第20章 中介者模式 272
20.1 中介者模式概述 272
20.2 中介者模式的结构与实现 274
20.2.1 中介者模式的结构 274
20.2.2 中介者模式的实现 275
20.3 中介者模式的应用实例 277
20.4 扩展中介者与同事类 282
20.5 中介者模式的优缺点与适用环境 286
20.5.1 中介者模式的优点 287
20.5.2 中介者模式的缺点 287
20.5.3 中介者模式的适用环境 287
20.6 本章小结 287
20.7 习题 288
第21章 备忘录模式 289
21.1 备忘录模式概述 289
21.2 备忘录模式的结构与实现 290
21.2.1 备忘录模式的结构 290
21.2.2 备忘录模式的实现 291
21.3 备忘录模式的应用实例 294
21.4 实现多次撤销 298
21.5 备忘录模式的优缺点与适用环境 301
21.5.1 备忘录模式的优点 301
21.5.2 备忘录模式的缺点 301
21.5.3 备忘录模式的适用环境 301
21.6 本章小结 302
21.7 习题 302
第22章 观察者模式 304
22.1 观察者模式概述 304
22.2 观察者模式的结构与实现 305
22.2.1 观察者模式的结构 305
22.2.2 观察者模式的实现 306
22.3 观察者模式的应用实例 308
22.4 观察者模式与.NET中的委托事件模型 313
22.5 观察者模式与MVC 315
22.6 观察者模式的优缺点与适用环境 316
22.6.1 观察者模式的优点 316
22.6.2 观察者模式的缺点 316
22.6.3 观察者模式的适用环境 317
22.7 本章小结 317
22.8 习题 318
第23章 状态模式 319
23.1 状态模式概述 319
23.2 状态模式的结构与实现 320
23.2.1 状态模式的结构 320
23.2.2 状态模式的实现 321
23.3 状态模式的应用实例 323
23.4 共享状态 330
23.5 使用环境类实现状态的转换 333
23.6 状态模式的优缺点与适用环境 337
23.6.1 状态模式的优点 337
23.6.2 状态模式的缺点 337
23.6.3 状态模式的适用环境 337
23.7 本章小结 337
23.8 习题 338
第24章 策略模式 341
24.1 策略模式概述 341
24.2 策略模式的结构与实现 342
24.2.1 策略模式的结构 342
24.2.2 策略模式的实现 343
24.3 策略模式的应用实例 344
24.4 PetShop 4.0中的订单处理 348
24.5 策略模式的优缺点与适用环境 349
24.5.1 策略模式的优点 349
24.5.2 策略模式的缺点 349
24.5.3 策略模式的适用环境 350
24.6 本章小结 350
24.7 习题 350
第25章 模板方法模式 352
25.1 模板方法模式概述 352
25.2 模板方法模式的结构与实现 353
25.2.1 模板方法模式的结构 353
25.2.2 模板方法模式的实现 354
25.3 模板方法模式的应用实例 356
25.4 钩子方法的使用 360
25.5 模板方法模式的优缺点与适用环境 363
25.5.1 模板方法模式的优点 363
25.5.2 模板方法模式的缺点 363
25.5.3 模板方法模式的适用环境 363
25.6 本章小结 363
25.7 习题 364
第26章 访问者模式 366
26.1 访问者模式概述 366
26.2 访问者模式的结构与实现 368
26.2.1 访问者模式的结构 368
26.2.2 访问者模式的实现 369
26.3 访问者模式的应用实例 371
26.4 访问者模式与组合模式联用 378
26.5 访问者模式的优缺点与适用环境 379
26.5.1 访问者模式的优点 379
26.5.2 访问者模式的缺点 380
26.5.3 访问者模式的适用环境 380
26.6 本章小结 380
26.7 习题 381
附录A UML类图 382
A.1 UML概述 382
A.2 类与类的UML表示 383
A.3 类之间的关系 385
附录B 设计模式模拟试题 393
B.1 模拟试题一 393
B.2 模拟试题二 396
参考文献 400