第1章 引言 1
1.1 为什么使用模式? 1
1.2 为什么使用设计模式? 2
1.3 为什么使用C#语言? 2
1.4 UML 3
1.5 本书给出的问题 3
1.6 本书的组织方式 4
1.7 欢迎来到Oozinoz公司! 5
1.8 小结 5
第1部分 接口型模式 9
第2章 接口型模式介绍 9
2.1 接口与抽象类 9
2.2 接口与委托 10
2.3 接口与属性 13
2.4 接口的细节 14
2.5 小结 14
2.6 普通接口无法提供的内容 15
第3章 适配器模式 16
3.1 对接口进行适配 16
3.2 类适配器与对象适配器 19
3.3 对.NET的数据进行适配 22
3.4 小结 25
第4章 外观模式 27
4.1 一个普通的外观 27
4.2 应用外观模式进行代码重构 29
4.3 外观、公用例程以及演示 36
4.4 小结 38
5.1 一个普通的合成 39
5.2 合成的递归行为 39
第5章 合成模式 39
5.3 合成、树形结构,以及环形结构 41
5.4 带环形结构的合成 45
5.5 环形结构产生的影响 48
5.6 小结 48
第6章 桥接模式 49
6.1 一个普通的抽象 49
6.2 从抽象到桥接 51
6.3 作为桥接的驱动器 53
6.4 数据库驱动器 53
6.5 小结 53
7.1 普通的职责 57
第2部分 职责型模式 57
第7章 职责型模式介绍 57
7.2 利用可访问性进行职责控制 58
7.3 小结 61
7.4 普通职责无法提供的内容 61
第8章 单件模式 62
8.1 单件模式的机制 62
8.2 单件与线程 63
8.3 识别单件模式 64
8.4 小结 65
第9章 观察者模式 66
9.1 C#语言对观察者的支持 66
9.2 委托机制 66
9.3 一个经典的例子——GUI中的观察者模式 69
9.4 模型/视图/控制器 75
9.5 分层 77
9.6 小结 80
第10章 中介者模式 81
10.1 一个经典实例——GUI中介者 81
10.2 关系完整性中介者 84
10.3 小结 90
第11章 代理模式 91
11.1 一个简单的代理 91
11.2 数据代理 94
11.3 远程代理 99
11.4 小结 103
12.1 一个普通的职责链模式 104
第12章 职责链模式 104
12.2 重构为职责链模式 105
12.3 将一个链进行固定 108
12.4 不带合成结构的职责链模式 109
12.5 小结 109
第13章 享元模式 111
13.1 不可改变性 111
13.2 提取一个享元中的不可改变部分 112
13.3 共享享元 113
13.4 小结 116
第3部分 构造型模式 119
第14章 构造型模式介绍 119
14.1 对象构造过程中产生的一些困难 119
14.3 普通的构造方法无法提供的内容 121
14.2 小结 121
第15章 生成器模式 123
15.1 一个普通的生成器模式 123
15.2 在约束下进行对象生成 125
15.3 一个更宽容的生成器 127
15.4 小结 128
第16章 工厂方法模式 129
16.1 一个经典实例——枚举器 129
16.2 识别工厂方法模式 131
16.3 确定对哪个类进行实例化 131
16.4 平行层次结构中的工厂方法模式 132
16.5 小结 134
17.1 一个经典实例——GUI工具箱 135
第17章 抽象工厂模式 135
17.2 抽象工厂与工厂方法 139
17.3 命名空间与抽象工厂 142
17.4 小结 142
第18章 原型模式 143
18.1 作为工厂的原型 143
18.2 利用克隆进行原型化 144
18.3 小结 145
第19章 备忘录模式 147
19.1 一个经典实例——使用备忘录完成取消操作 147
19.2 备忘录的持久性 153
19.3 跨越多次会话的永久备忘录 153
19.4 小结 155
20.1 操作与方法 159
第20章 操作型模式介绍 159
第4部分 操作型模式 159
20.2 特征标记 160
20.3 委托 161
20.4 异常 162
20.5 算法与多态 162
20.6 小结 163
20.7 普通操作无法提供的内容 164
第21章 模板方法模式 165
21.1 一个经典实例——排序 165
21.2 完成一个算法 167
21.3 模板方法的钩子 169
21.4 重构为模板方法 171
21.5 小结 172
第22章 状态模式 173
22.1 对状态进行建模 173
22.2 重构为状态模式 176
22.3 使状态成为常量 180
22.4 小结 181
第23章 策略模式 183
23.1 对策略进行建模 183
23.2 重构为策略模式 185
23.3 对策略模式和状态模式进行比较 189
23.4 对策略模式和模板方法模式进行比较 190
23.5 小结 190
第24章 命令模式 191
24.1 一个经典实例——菜单命令 191
24.2 利用命令模式提供一个服务 192
24.3 命令模式的钩子 195
24.4 命令模式与其他模式的关系 196
24.5 小结 197
第25章 解释器模式 199
25.1 一个解释器实例 199
25.2 解释器、语言以及扫描分析器 210
25.3 小结 210
第5部分 扩展型模式 213
第26章 扩展型模式介绍 213
26.1 面向对象设计的基本原则 213
26.2 Liskov替代原则 213
26.3 Demeter法则 215
26.5 普通扩展无法提供的内容 216
26.4 消除代码的气味 216
26.6 小结 217
第27章 装饰模式 219
27.1 一个经典例子——流 219
27.2 函数包装器 226
27.3 GUI中的装饰器 232
27.4 装饰模式与其他模式的关系 232
27.5 小结 232
第28章 迭代器模式 234
28.1 一般的迭代 234
28.2 线程安全的迭代 234
28.3 对一个合成进行迭代 239
28.4 小结 248
29.1 访问者机制 249
第29章 访问者模式 249
29.2 一个普通的访问者模式 250
29.3 访问者环 255
29.4 对访问者模式的争论 259
29.5 小结 260
附录A 使用指导 261
A.1 从本书获得更多的知识 261
A.2 理解经典实例 261
A.3 在代码中应用设计模式 262
A.4 坚持学习 262
附录B 答案 264
B.1 接口型模式介绍 264
B.2 适配器模式 266
B.3 外观模式 269
B.4 合成模式 271
B.5 桥接模式 273
B.6 职责型模式介绍 275
B.7 单件模式 277
B.8 观察者模式 278
B.9 中介者模式 280
B.10 代理模式 284
B.11 职责链模式 285
B.12 享元模式 288
B.13 构造型模式介绍 291
B.14 生成器模式 293
B.15 工厂方法模式 295
B.16 抽象工厂模式 299
B.17 原型模式 302
B.18 备忘录模式 304
B.19 操作型模式介绍 306
B.20 模板方法模式 307
B.21 状态模式 309
B.22 策略模式 310
B.23 命令模式 312
B.24 解释器模式 314
B.25 扩展型模式介绍 316
B.26 装饰模式 317
B.27 迭代器模式 319
B.28 访问者模式 321
C.1 获取代码与使用代码 323
C.2 构建Oozinoz系统的代码 323
附录C OOZINOZ系统的源代码 323
C.3 帮助Oozinoz代码查找相关文件 324
C.4 利用NUnit对代码进行测试 324
C.5 如何查找相关文件 325
C.6 小结 325
附录D UML概览 326
D.1 类 326
D.2 类关系 327
D.3 接口 328
D.4 委托与事件 329
D.5 对象 330
D.6 状态 331
术语表 332
参考文献 338