第一篇 预备知识——发掘C#语言的面向对象设计潜力 1
第1章 面向对象设计原则 2
1.1 说明 3
1.2 单—职责原则(SRP) 4
1.3 里氏替换原则(LSP)和依赖倒置原则(DIP) 7
1.4 接口隔离原则(ISP) 8
1.5 迪米特法则(LoD:Law of Demeter、LKP) 9
1.6 开闭原则(OCP) 11
1.7 小结 15
1.8 自我检验 15
第2章 重新研读C#语言 16
2.1 说明 17
2.2 C#部分语法内容扩展 18
2.2.1 命名空间 18
2.2.2 简洁的异步调用机制——委托和事件 21
2.2.3 考验算法的抽象能力——泛型 29
2.2.4 用贴“标签”的方式扩展对象特性 35
2.2.5 可重载运算符与转换运算符 38
2.3 面向插件架构的配置系统设计 41
2.3.1 认识.NET Framework提供的主要配置实体类 42
2.3.2 小结 43
2.3.3 自我检验 43
2.4 依赖注入 44
2.4.1 背景介绍 44
2.4.2 示例情景 45
2.4.3 构造注入 47
2.4.4 设值注入 48
2.4.5 接口注入 48
2.4.6 基于属性的注入方式 50
2.4.7 小结 52
2.4.8 自我检验 53
2.5 连贯接口 53
第3章 Java和C# 56
3.1 说明 57
3.2 枚举 57
3.3 泛型 61
3.4 属性和标注 63
3.5 操作符重载和类型转换重载 64
3.6 委托、事件、匿名方法 65
3.7 Lamada和LINQ 68
3.8 小结 73
第二篇 创建型模式——管理对象实例的构造过程 74
第4章 工厂&工厂方法模式 75
4.1 说明 76
4.2 简单工厂 76
4.2.1 最简单的工厂类 76
4.2.2 简单工厂的局限性 79
4.3 经典回顾 79
4.4 解耦工厂类型与客户程序 81
4.5 基于配置文件的工厂 83
4.5.1 基于配置文件解耦工厂接口和具体工厂类型 83
4.5.2 基于配置文件解耦工厂类型和具体工作产品 84
4.6 典型工程化实现 86
4.7 小结 89
4.8 自我检验 90
第5章 单件模式 91
5.1 说明 92
5.2 经典回顾 93
5.3 线程安全的单件模式 96
5.4 细节决定成败 98
5.5 细颗粒度的单件模式 99
5.5.1 背景讨论 99
5.5.2 解决桌面应用中细颗粒度单件模式问题 100
5.5.3 解决Web应用中细颗粒度单件模式问题 101
5.6 分布式环境下的单件模式 102
5.7 单件模式的使用问题 105
5.8 小结 105
第6章 抽象工厂模式 106
6.1 说明 107
6.2 经典回顾 108
6.3 解决经典模式的硬伤 110
6.4 基于委托的生产外包 112
6.5 小结 114
第7章 创建者模式 116
7.1 说明 117
7.2 经典回顾 118
7.3 为Builder打个标签 121
7.4 具有装配/卸载能力的Builder 126
7.5 连贯接口形式的Builder 126
7.6 小结 130
7.7 自我检验 130
第8章 原型模式 131
8.1 说明 132
8.2 经典回顾 132
8.3 表面模仿还是深入模仿 136
8.3.1 概念 136
8.3.2 制作实现克隆的工具类型 137
8.3.3 简单自定义复制过程 139
8.3.4 细颗粒度自定义复制过程 140
8.4 小结 142
8.5 自我检验 143
第三篇 结构型模式——组织灵活的对象体系 145
第9章 适配器模式 146
9.1 说明 147
9.2 经典回顾 148
9.3 类型转换符实现适配 151
9.4 组适配器 152
9.5 用配置约定适配过程 154
9.6 面向数据的适配机制 156
9.7 小结 158
9.8 自我检验 158
第10章 桥模式 161
10.1 说明 162
10.2 经典回顾 163
10.3 分解复杂性的多级桥关系 166
10.4 看着“图纸”造桥 171
10.5 具有约束关系的桥 174
10.6 小结 175
10.7 自我检验 176
第11章 组合模式 177
11.1 说明 178
11.2 经典回顾 179
11.3 用迭代器遍历组合类型 183
11.4 适于XML信息的组合模式 185
11.5 分布式“部分—整体”环境 188
11.6 小结 188
11.7 自我检验 189
第12章 装饰模式 190
12.1 说明 191
12.2 经典回顾 192
12.3 卸载装饰 195
12.4 通过配置和创建者完成装饰过程 196
12.5 把装饰类型做成标签 198
12.5.1 “彻底”的属性注入 198
12.5.2 方式1:采用.NET平台自带的AOP机制实现 199
12.5.3 自定义代理拦截框架方式 202
12.5.4 进一步分析 205
12.6 小结 205
第13章 外观模式 207
13.1 说明 208
13.2 经典回顾 208
13.3 平台、开发语言无关的抽象Facade接口——WSDL 211
13.4 小结 212
第14章 享元模式 214
14.1 说明 215
14.2 经典回顾 216
14.3 制订共享计划 219
14.4 通过委托和队列实现异步享元 219
14.5 小结 220
第15章 代理模式 221
15.1 说明 222
15.2 经典回顾 222
15.3 远程代理 224
15.4 小结 226
第四篇 行为型模式——算法、控制流的对象化操作 227
第16章 职责链模式 228
16.1 说明 229
16.2 经典回顾 229
16.3 非链表方式定义职责链 233
16.4 小结 237
第17章 模板方法模式 239
17.1 说明 240
17.2 经典回顾 241
17.3 方法的模板——委托 243
17.4 类和接口的模板——泛型 243
17.5 系统架构的模板——配置 244
17.6 小结 245
17.7 自我检验 245
第18章 解释器模式 247
18.1 说明 248
18.2 经典回顾 249
18.3 采用正则表达式 252
18.4 采用字典 255
18.5 多级解释器系统 258
18.6 用XSD解释自定义业务语言 260
18.7 小结 261
18.8 自我检验 261
第19章 命令模式 262
19.1 说明 263
19.2 经典回顾 264
19.3 打包命令对象 266
19.4 异步命令操作 270
19.5 命令操作队列 272
19.6 小结 273
19.7 自我检验 273
第20章 迭代器模式 276
20.1 说明 277
20.2 经典回顾 278
20.3 .NET内置的迭代器 279
20.4 小结 282
20.5 自我检验 282
第21章 中介者模式 283
21.1 说明 284
21.2 经典回顾 285
21.3 基于委托和事件的松耦合中介者 288
21.4 根据配置动态协调通知关系 290
21.5 小结 292
21.6 自我检验 293
第22章 备忘录模式 294
22.1 说明 295
22.2 经典回顾 296
22.3 把备忘压栈 300
22.4 备忘录的序列化和持久化 302
22.5 小结 305
22.6 自我检验 305
第23章 观察者模式 307
23.1 说明 308
23.2 经典回顾 310
23.3 .NET内置的观察者机制——事件 313
23.4 具有观察者机制的集合类型 315
23.5 面向服务接口的观察者 316
23.6 小结 318
23.7 自我检验 318
第24章 状态模式 320
24.1 说明 321
24.2 经典回顾 322
24.3 状态的序列化和持久化 326
24.4 主动状态对象 328
24.5 用WF完成更易于编排的状态模式 329
24.6 小结 330
24.7 自我检验 330
第25章 策略模式 332
25.1 说明 333
25.2 经典回顾 334
25.3 策略模式与解释器模式的协作 335
25.4 .NET自带的策略接口 337
25.5 小结 338
第26章 访问者模式 339
26.1 说明 340
26.2 经典回顾 340
26.3 借助反射或Dynamic实现访问者 343
26.4 用委托实现工程化的访问者 346
26.5 小结 347
26.6 自我检验 347
第五篇 GOF综合练习 349
第27章 GOF部分阶段实践 350
27.1 回顾GOF 351
27.2 需求的提出 351
27.3 第一轮技术分析 352
27.4 第二轮技术分析 354
27.5 第三轮技术分析 356
27.6 示例实现 357
27.7 验证逻辑的有效性 369
27.8 小结 380
27.9 后记 381
附录 Java和C#关键字对照表 382