第1部分 特定语言的模式与惯用法 3
第1章 局部所有权:管理C++中的动态对象 3
1.1 摘要 3
1.2 介绍 3
1.3 术语 4
1.4 综述 5
1.4.1 局部所有权 5
1.4.2 动态对象之外的资源 5
1.5 模式1:创建者是惟一所有者 5
1.6 模式1.1:函数是惟一所有者 6
1.7 模式1.2:对象是惟一所有者 7
1.8 模式1.3:类作为惟一所有者 9
1.9 模式2:所有者序列 10
1.10 模式3:共享所有权 12
1.11 相关主题 14
1.12 致谢 15
1.13 参考文献 15
第2章 延迟优化:高效Smalltalk编程模式 17
2.1 性能评估 19
2.2 延迟优化 20
2.3 性能标准 22
2.4 阈值开关 23
2.5 性能度量 24
2.6 热点 25
2.7 实验 26
2.8 可缓存的表达式 27
2.9 缓存临时变量 29
2.10 缓存参数 30
2.11 缓存状态变量 32
2.12 简化 34
2.13 削减临时对象 35
2.14 对象转换 36
2.15 假设一定大小的(Hpyoth-a-sized)集合 37
2.16 连接流 38
2.17 参考文献 40
第3章 将Smalltalk代码划分成ENVY/Developer组件 41
3.1 综述 41
3.2 模式语言:ENVY划分 42
3.3 分层和分区域架构 43
3.3.1 独立层 45
3.3.2 独立区 46
3.4 应用中的层 48
3.5 子应用中的区域 49
3.6 两个应用 51
3.7 没有子应用 52
3.8 致谢 53
3.9 参考文献 53
第2部分 通用模式 57
第4章 命令处理器 57
参考文献 65
第5章 观察者模式的实现模式 67
5.1 介绍 67
5.2 模式:目标变化的传递 67
5.3 模式:每个变化请求一条消息 70
5.4 模式:每个受影响对象一条消息 71
5.5 反面模式:每个变化请求优化消息 72
5.6 模式:消息包 73
5.7 模式:观察者更新消息 74
5.8 模式:更新观察者 75
5.9 参考文献 75
第6章 封装类树模式 77
6.1 介绍 77
6.2 模式背景 77
6.3 框架示例 79
6.4 类树封装 80
6.4.1 类获取 81
6.4.2 后创建 82
6.5 规范支持 84
6.5.1 类子句 84
6.5.2 类规范 86
6.5.3 类语义 87
6.6 与其他模式的关系 89
6.7 模式格式 90
6.8 小结与结论 90
6.9 致谢 91
6.10 参考文献 91
第7章 代理设计模式回顾 93
7.1 摘要 93
7.2 例子 93
7.3 一般模式 94
7.4 上下文 94
7.5 问题 94
7.6 解决方案 94
7.7 结构 95
7.8 动态 95
7.9 实现 96
7.10 第二层模式 97
7.10.1 远程代理 97
7.10.2 保护代理 97
7.10.3 缓存代理 97
7.10.4 同步代理 98
7.10.5 计数代理 98
7.10.6 虚拟代理 98
7.10.7 防火墙代理 99
7.11 组合代理变形 99
7.12 示例的解决方案 99
7.13 相关工作 100
7.14 精选的已知应用 100
7.15 结论 101
7.16 同时参阅 101
7.17 开放问题 102
7.18 致谢 102
7.19 参考文献 103
第8章 MOODS:状态面向对象设计的模块 104
8.1 设计决策树 104
8.2 设计决策1:要简化复杂行为,使用分解 106
8.3 设计决策2:对于有情绪的对象,使用状态类 107
8.3.1 如何跟踪对象变化的情绪 109
8.3.2 如何支持情绪敏感(Mood-Sensitive)的方法选择 109
8.4 设计决策3:当事件产生情绪时,使用状态机 110
8.5 设计决策4:对于状态机,使用转移方法 110
8.6 设计决策5:当状态是条件时,使用判断状态类 111
8.7 设计决策6:当状态是关联时,使用状态对象 112
8.8 设计决策7:对于复杂情绪,使用情绪转换器 113
8.9 设计决策8:当有很多情绪时,使用情绪分类器 115
8.10 例子中用到的C++源代码 117
8.10.1 使用状态对象的分配器 117
8.10.2 分配器作为带有判断状态类的转换器 120
8.10.3 分配器作为情绪分类器 122
8.11 参考文献 124
第9章 购物者 125
9.1 介绍 125
9.2 动机 125
9.3 结构 126
9.4 适用性 127
9.5 参与者 127
9.6 协作 128
9.7 结论 128
9.8 实现 129
9.8.1 遍历提供者组 129
9.8.2 获取和选择提供者中的被请求项目 130
9.9 示例代码 130
9.10 相关模式 133
9.11 致谢 134
9.12 参考文献 134
第3部分 专用模式 138
第10章 可分离检查器/可删除cout:用于设计透明分层服务的一种结构模式 138
10.1 摘要 138
10.2 动机 138
10.3 解决方案 140
10.4 适用性 141
10.5 静态和动态结构 141
10.5.1 类、责任和协作者 142
10.5.2 动态协作者 143
10.6 结论 143
10.7 实现 145
10.8 示例代码与使用 146
10.9 已知应用 148
10.10 相关模式 149
10.10.1 装饰者 149
10.10.2 访问者 149
10.10.3 独身者 149
10.11 注释 149
10.12 变形 150
10.13 致谢 150
10.14 参考文献 151
第11章 面向对象超媒体应用的设计模式 152
11.1 摘要 152
11.2 介绍 152
11.3 一种面向对象的超媒体框架 153
11.4 NavigationStrategy 154
11.5 NavigationObserver 158
11.6 结束语 162
11.7 致谢 162
11.8 参考文献 162
第12章 组织复用:用于与分布式团队处理卫星遥测的模式 165
12.1 摘要 165
12.2 介绍 165
12.3 项目组织 166
12.4 模式 167
12.4.1 模式1:松散接口 167
12.4.2 模式2:解释器/构造器 168
12.4.3 模式3:工厂等级 170
12.4.4 模式4:处理器 172
12.5 结论 173
12.6 文中引用的模式 174
12.6.1 来自“生成开发过程模式语言”[Coplien95]的模式 174
12.6.2 来自“设计模式”[Gamma+95]的模式 174
12.6.3 来自“早期开发模式”[Beck94]的模式 175
12.7 致谢 175
12.8 参考文献 175
第13章 备份模式:在面向对象的软件中设计冗余 176
13.1 摘要 176
13.2 目的 176
13.3 别名 176
13.4 问题与上下文 176
13.5 难点 177
13.6 难点解决方案 177
13.7 动机 178
13.8 适用性 179
13.9 结构 179
13.10 参与者 180
13.11 协作 181
13.12 结论 182
13.13 实现 183
13.13.1 创建候选 183
13.13.2 候选的独立性 184
13.13.3 保持当前候选的状态 185
13.13.4 确定正确的功能 185
13.13.5 撤销主模块执行产生的影响 185
13.13.6 验收测试 185
13.14 示例代码与应用 187
13.15 已知应用 190
13.16 相关模式 190
13.17 小结 191
13.18 致谢 191
13.19 参考文献 191
第14章 交叉中断:对象-RDBMS集成的模式语言(静态模式) 193
14.1 摘要 193
14.2 介绍 193
14.3 静态模式(关系方面) 194
14.3.1 表的设计时间 194
14.3.2 将对象描述成表 195
14.3.3 将对象关系描述成表 196
14.3.4 在关系数据库中描述继承关系 197
14.3.5 在关系数据库中描述集合 199
14.3.6 对象标识符(OID) 200
14.3.7 外键引用 201
14.4 静态模式(对象方面) 202
外键与直接引用 202
14.5 参考文献 203
第15章 事务和账户 204
15.1 摘要 204
15.2 介绍 204
15.3 商业事务 206
15.4 将事务处理与存档分开 206
15.5 商业账户 207
15.6 组合事务 208
15.7 调整事务 208
15.8 月底结算 209
15.9 显式业务规则 210
15.10 持续处理 211
15.11 致谢 212
15.12 参考文献 212
第4部分 架构模式 216
第16章 软件架构的一些模式 216
16.1 摘要 216
16.2 软件架构的设计模式 216
16.3 架构模式 217
16.3.1 流水线 218
16.3.2 数据抽象 219
16.3.3 通信进程 220
16.3.4 隐式调用 221
16.3.5 仓库(Repository) 222
16.3.6 解释器 223
16.3.7 主程序和子例程 224
16.3.8 分层架构 225
16.4 致谢 226
16.5 参考文献 227
第17章 反射 229
17.1 介绍 229
17.2 例子 229
17.3 结构 232
17.4 动态 234
17.5 实现 236
17.6 示例解析 242
17.7 变形 242
17.8 已知应用 242
17.9 结论 244
17.10 同时参阅 246
17.11 参考文献 246
第18章 进化、架构和变形 248
18.1 摘要 248
18.2 介绍 248
18.3 软件构造 250
18.4 灵活基础 253
18.5 变形 257
18.6 小结 262
18.7 致谢 262
18.8 参考文献 263
第5部分 过程和组织 268
第19章 软件设计中的优先级问题 268
19.1 介绍 268
19.2 模式1:保护变量 270
模式1.1:持久存取器 271
19.3 模式2:技能混合 272
19.3.1 模式2.1:三个子系统 273
19.3.2 模式2.2:通用UI,专用UI 274
19.3.3 模式2.3:通用和专用 275
19.4 模式3:应用边界 275
19.4.1 模式3.1:分解确认 276
19.4.2 模式3.2:内部编辑 277
19.5 模式4:每团队的子类 278
模式4.1:模型层次 279
19.6 模式5:正面 280
模式5.1:域截取 281
19.7 对这种格式的评价 281
19.8 参考文献 282
第20章 决策延迟和捕捉模式语言 283
20.1 介绍 283
20.2 综述 283
20.3 模式1:基于决策的模型 284
20.4 模式2:适当的现存模型 285
20.5 模式3:可执行模型 286
20.6 模式4:向上的可溯性 287
20.7 模式5:向下的变化 288
20.8 致谢 289
20.9 参考文献 289
第21章 团队的组织模式 290
21.1 模式语言:团队设计 290
21.2 模式1:目标一致 291
21.3 模式2:成员关系的多样性 292
21.4 模式3:团结起来 293
21.5 模式4:团队确认 295
21.6 参考文献 296
第22章 责任和组织结构 297
22.1 介绍 297
22.2 组织结构的问题 297
22.3 模式综述 298
22.4 模型符号 299
22.5 模式1:团体 301
22.6 模式2:组织的递归结构 302
22.7 模式3:子类型中带有约束的抽象模型 303
22.8 模式4:多层关联 304
22.9 模式5:组织结构类型的关系 305
22.10 模式6:关联具体化 306
22.11 模式7:类型关系 307
22.12 模式8:责任抽象 308
22.13 模式9:责任知识等级 309
22.14 模式10:将经常变化的结构放到实例中 310
22.15 模式11:知识等级 311
22.16 致谢 312
22.17 参考文献 313
第23章 插曲:一种竞争开发模式语言 314
23.1 产品 316
23.1.1 产品的最初状态 316
23.1.2 市场调查 317
23.1.3 隐含需求 317
23.2 开发 318
23.2.1 工作序列 318
23.2.2 工作组 319
23.2.3 工作序列报表 320
23.2.4 比较工作 320
23.2.5 完成天数 321
23.2.6 开发插曲 322
23.2.7 不正规的劳动计划 323
23.2.8 工作划分 323
23.2.9 再提交会议 324
23.3 编程 324
23.3.1 需求调查 325
23.3.2 技术备忘录 325
23.3.3 参考数据 325
23.3.4 编程插曲 326
23.4 补充模式 327
23.5 参考文献 328
第6部分 展示 330
第24章 课堂教学模式 330
24.1 摘要 330
24.2 介绍 330
24.3 本章要讨论的模式 330
24.4 模式1:重复课程开发 331
24.5 模式2:鸡和蛋 332
24.6 模式3:新旧混合 332
24.7 模式4:陷阱诊断和预防 333
24.8 模式5:模块的故事 334
24.9 模式6:七个部分 335
24.10 模式7:显而易见的清单 335
24.11 模式8:熟悉的例子 336
24.12 模式9:使用一周的例子 337
24.13 模式10:参考例子 338
24.14 模式11:生动的类比 339
24.15 模式12:仿真游戏 339
24.16 模式13:测试游戏 340
24.17 模式14:活动后听取汇报 341
24.18 模式语言 342
24.19 参考文献 344
第25章 演示准备:用于准备软件演示的一种模式语言 345
25.1 介绍 345
25.2 模式1:元素识别 346
25.3 模式2:催化场景 347
25.4 模式3:易变的代码 348
25.5 模式4:原型语言 349
25.6 模式5:轻量级用户界面 350
25.7 模式6:明智的争论 351
25.8 模式7:存档场景 352
25.9 结论 353
25.10 参考文献 353
第26章 基于文章的网站使用的一种模式语言 354
26.1 A:文本格式模式 355
A.1:自然文本流 355
A.2:自然文本超链接 356
A.3:自然文本目录 356
26.2 B:文章格式模式 357
B.1:(生动的文章) 358
B.2:(低深度文档树) 358
B.3:(文档格式一致性) 358
B.4:(基于小节的文章) 358
B.5:(短小的、单页文章) 358
B.6:(一致的页眉和页脚) 359
B.7:(介绍性小节) 359
B.8:(介绍性图片) 359
B.9:(朝向顶部的活动) 359
B.10:(文档内容列表) 359
B.11:引用项 360
B.12:(后一个和前一个引用链接) 360
26.3 C:元信息(Meta-Informational)模式 360
C.1:揭露内幕 361
C.2:(作者小传) 361
C.3:(对应日期) 361
C.4:(工作表文档) 362
C.5:(可下载CGI) 362
C.6:(联系作者) 362
C.7:(直接文档讨论) 362
C.8:新文档通知 363
C.9:(变化的文档通知) 363
C.10:(临时保留文档版本) 363
26.4 D:调制解调器速度慢的模式 364
D.1:14.4Kbps测试 364
D.2:(少量图片) 364
D.3:(隔行扫描的图片) 365
D.4:(低位深度图片) 365
26.5 E:其他模式 365
E.1:(链接类型差别) 365
E.2:(主页版本) 365
26.6 致谢 366
26.7 参考Web站点 366
第7部分 并行编程/分布式系统 369
第27章 半同步/半异步:高效的、结构完善的并行I/O使用的一种架构模式 369
27.1 致谢 386
27.2 参考文献 386
第28章 资源交换器:低开销并行资源管理的一种行为模式 388
28.1 摘要 388
28.2 解决方案 389
28.3 应用 391
28.4 结构 391
28.4.1 类、责任和协作者 392
28.4.2 动态协作 393
28.5 结论 393
28.6 实现 394
28.7 示例代码和使用 395
28.8 已知应用 397
28.9 相关模式 397
28.10 变形 397
28.11 致谢 398
28.12 参考文献 398
第29章 客户—分配器—服务器设计模式 400
参考文献 405
第30章 主动对象:并行编程使用的一种对象行为模式 406
30.1 摘要 406
30.1.1 目的 406
30.1.2 别名 406
30.1.3 动机 406
30.1.4 适用性 409
30.1.5 结构及参与者 409
30.1.6 协作者 410
30.1.7 结论 411
30.1.8 实现 411
30.1.9 示例代码 413
30.1.10 已知应用 419
30.1.11 相关模式 419
30.2 参考文献 420
第31章 为并行程序选择锁定设计 422
31.1 摘要 422
31.2 例子算法 422
31.3 上下文概述 423
31.4 难点 424
31.5 锁定设计模式索引 425
31.5.1 模式关系 426
31.5.2 解决难点 427
31.5.3 缺陷表 428
31.6 锁定设计模式 429
31.6.1 串行程序 429
31.6.2 代码锁定 430
31.6.3 数据锁定 432
31.6.4 数据所有权 435
31.6.5 并行快捷路径 438
31.6.6 读者/写者锁定 439
31.6.7 分层锁定 441
31.6.8 分配器缓存 444
31.6.9 临界区熔合 445
31.6.10 临界区划分 447
31.7 致谢 448
31.8 参考文献 449
第8部分 反应性系统 453
第32章 反应性系统中面向对象的设计模式 453
32.1 介绍 453
32.1.1 仿真的重要性 453
32.1.2 BASEstar Open 454
32.2 模式1:面向对象的仿真,事件驱动的现实 455
32.3 模式2:具体化事件 457
32.4 模式3:具体化系统状态 458
32.5 模式4:远程控制对象 460
32.6 模式5:事件驱动 461
32.7 总结 462
32.8 致谢 463
32.9 参考文献 463
第33章 容错电信系统模式 464
33.1 介绍 464
33.2 术语 465
33.3 模式:人工干预最小化 465
33.4 模式:人最了解 467
33.5 模式:无升级消息的5分钟 468
33.6 模式:瞬时抑制 469
33.7 模式:漏桶计数器 470
33.8 模式:SICO首要并总是 472
33.9 模式:尝试所有的硬件联合体 473
33.10 模式:欺骗一次 475
33.11 致谢 477
33.12 参考文献 477
第34章 利用队列改善交互应用的响应性 478
34.1 摘要 478
34.2 介绍 478
34.3 模式1:事件队列 479
34.4 模式2:组合兼容事件 480
34.5 模式3:处理人为事件 483
34.6 模式4:将执行和输出分离 485
34.7 结论 486
34.8 致谢 486
34.9 参考文献 486
第35章 用于改善反应性系统功能的模式语言 488
35.1 摘要 488
35.2 介绍 488
35.3 问题域历史 488
35.4 模式语言 489
35.5 容量模式 490
35.5.1 模式1:容量瓶颈 490
35.5.2 模式2:处理容量 491
35.5.3 模式3:优化高运行状况 493
35.5.4 模式4:分散负载 495
35.5.5 模式5:完成处理过程中的工作负载 496
35.5.6 模式6:在失效前更新工作负载 497
35.5.7 模式7:匹配正在处理的工作负载与新工作负载 499
35.5.8 模式8:分担负载 500
35.5.9 模式9:在外设分散工作负载 501
35.5.10 模式10:信用漏桶 501
35.6 致谢 503
35.7 参考文献 503