本书介绍了一类全新的设计模式,称为元素模式(Elemental Design Pattern),其为软件工程设计模式的研究和应用打下了基础。元素模式深深植根于软件程序设计理论的研究,但其目的却在于实践性和实用性。从程序设计的新手,到资深的开发工程师,都是元素模式的目标受众。它能够带领学生加入软件工业的大军,也能够为研究者打开新的思路。
作者简介: 关于作者 Jason McC. Smith,2005 年毕业于北卡罗莱纳州立大学教堂山分校,获计算机科学博士学位。该校也是元素模式的诞生地,元素模式当时是模式查询和识别系统(System for Pattern Query and Recognition,SPQR)项目的组成部分。Smith 博士因其在校的研究项目而荣获两项美国国家专利,一项与 SPQR 所采用的技术相关,另一项则来自 FaceTop 分布式文档协作系统。 此前,Smith 博士在物理仿真工程和咨询界工作过多年,取得了华盛顿州立大学的物理学和数学学士学位,值得一提的项目包括声纳和海洋环境仿真、电子工程仿真、商用和军用飞机飞行仿真,以及实时图形训练系统等。在 IBM 沃森研究中心工作的四年,使 Smith 博士有机会将从 SPQR 和 EDP 目录中获得的经验加以组织,并应用到大量的软件实体中,包括遗留系统和现代系统。 Smith博士现在供职于华盛顿州柯克兰市的The Software Revolution公司,任资深研究科学家。在那里,他持续地优化 EDP 目录,并寻找各种方法来推进公司在自动控制现代化及遗留系统改造方面的业务目标。
目录: 目 录 第1章 设计模式介绍1 1.1 部落神话和部落智慧5 1.2 艺术还是科学9 1.2.1 生搬硬套地对待模式9 1.2.2 模式和实现语言的相关性讨论10 1.2.3 从神话到科学12 第2章 元素模式13 2.1 背景14 2.2 定位、动机和方法17 2.2.1 解析装饰器18 2.2.2 纵身兔穴21 2.2.3 语境31 2.2.4 设计空间34 2.3 核心 EDP44 2.4 结论45 第3章 模式实例记法47 3.1 基本原理47 3.2 PIN 箱51 3.2.1 简易 PIN 箱52 3.2.2 标准 PIN 箱54 3.2.3 扩展 PIN 箱58 3.2.4 堆叠 PIN 箱与多重性61 3.2.5 剥离和合并65 3.3 结论69 第4章 EDP的运用71 4.1 模式的组成71 同位素76 4.2 改造装饰器81 4.3 重构96 4.4 大局观108 4.5 为什么需要阅读附录 114 4.6 高级主题115 4.6.1 重点文档与培训115 4.6.2 指标116 4.6.3 程序化分析119 4.7 结论119 第5章 EDP编目121 创建对象123 检索132 继承136 抽象接口145 委托151 重定向157 集聚165 xvi 递归171 归复方法178 扩展方法187 委托型集聚193 重定向型递归199 信托型委托206 信托型重定向215 表亲信托型委托222 表亲信托型重定向229 第6章 中间模式结构237 实现方法239 检索型创建243 检索型共享248 对象标识符253 对象递归260 第7章 GoF设计模式成分解析269 7.1 创建型模式270 7.1.1 抽象工厂270 7.1.2 工厂方法274 7.2 结构型模式278 7.2.1 装饰器278 7.2.2 代理282 7.3 行为型模式284 7.3.1 职责链284 7.3.2 模板方法286 7.4 结论291 附录 ρ演算293 A.1 依赖运算符294 A.2 传递律和同位素297 A.3 相似性298 A.4 EDP 形式化299 A.5 组合及化简规则303 A.6 模式实例记法和角色306 A.7 EDP 定义307 A.7.1 创建对象307 A.7.2 检索308 A.7.3 继承310 A.7.4 抽象接口310 A.7.5 委托311 A.7.6 重定向312 A.7.7 集聚312 A.7.8 递归313 A.7.9 归复方法313 A.7.10 扩展方法314 A.7.11 委托型集聚315 A.7.12 重定向型递归315 A.7.13 信托型委托316 A.7.14 信托型重定向317 A.7.15 表亲信托型委托318 A.7.16 表亲信托型重定向319 A.8 中间模式定义320 A.8.1 实现方法320 A.8.2 检索型创建321 A.8.3 检索型共享322 A.8.4 对象标识符323 A.8.5 对象递归324 A.9 GoF 设计模式定义325 A9.1 抽象工厂325 A9.2 工厂方法326 A9.3 装饰器328 A9.4 代理329 A9.5 职责链330 A9.6 模板方法331 参考文献333
|