首页 > 代码库 > 元素模式

元素模式

元素模式(最新Jolt大奖得主彻底颠覆传统GoF设计模式的里程碑著作

【美】Jason McC. Smith(杰森.史密斯) 著

高博 凌杰 徐平平

ISBN 978-7-121-23468-2

2014年6月出版

定价:69.00元

364

16

编辑推荐

本书介绍一类全新的设计模式——元素模式(Elemental Design Pattern)。元素模式植根于软件程序设计理论,目的却在于实践性和实用性。程序设计新手与资深开发工程师都是元素模式的目标受众。它能带领学生加入软件工业大军,也能为研究者打开新思路。

作者的非凡洞见被凝结为16种元素模式,其与四人帮设计模式的本质区别在于——元素模式建立在对象、字段、方法、类型这四个维度的设计空间上,让模式变得智能而鲜活,可以由所处位置直观感知其含义,不同模式间的关系同样可由位置表征。

本书用代码、图形(PIN箱)和代数(ρ演算)三种方式来描述设计模式,每一种都可以高效地转换为实际工作代码。

软工的本质即为结合抽象方法论与具体开发实践,因而本书提出的设计模式新术语、新方法,必将成为软件开发和软件工程的主流。

掌握书中一整套全新工具,你将对程序设计基本概念有更深入的理解,并知道它们是以怎样的方式联系和交互才产生了伟大的创意。

内容提要

即使是经验丰富的软件专业人士,也会发现要为其企业找到能带来实质价值的模式应用方式殊非易事。《元素模式》首次以全面的方法论介绍元素模式,给出标准的命名和描述,阐述它们的重要性,帮助人们比较和选用,充分利用模式的真正力量,将它们转化成实际的、更加简洁直接的软件实现,并得到非常不错的效果。

对于开发工程师、设计师、架构师和分析师,《元素模式》都能提供有价值的指导,帮助他们在大多数语言、环境和问题领域使用模式。

目录

第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 核心EDP 44

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

递归 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

作者简介

作者简介:Jason McC. Smith2005 年毕业于北卡罗莱纳州立大学教堂山分校,获计算机科学博士学位。该校也是元素模式的诞生地,元素模式当时是模式查询和识别系统(System for Pattern Query and RecognitionSPQR)项目的组成部分。Smith 博士因其在校的研究项目而荣获两项美国国家专利,一项与SPQR 所采用的技术相关,另一项则来自 FaceTop 分布式文档协作系统。

此前,Smith 博士在物理仿真工程和咨询界工作过多年,取得了华盛顿州立大学的物理学和数学学士学位,值得一提的项目包括声纳和海洋环境仿真、电子工程仿真、商用和军用飞机飞行仿真,以及实时图形训练系统等。

IBM 沃森研究中心工作的四年,使 Smith 博士有机会将从 SPQR EDP 目录中获得的经验加以组织,并应用到大量的软件实体中,包括遗留系统和现代系统。

Smith博士现在供职于华盛顿州柯克兰市的TheSoftware Revolution公司,任资深研究科学家。在那里,他持续地优化 EDP 目录,并寻找各种方法来推进公司在自动控制现代化及遗留系统改造方面的业务目标。

译者简介:高博,1983年生,毕业于上海交通大学。目前在EMC中国卓越研发集团任首席工程师,在信息科学和工程领域有近15年实践和研究经验。酷爱读书和写作,业余研究兴趣涉猎广泛。译著包括图灵奖作者高德纳的《研究之美》和布鲁克斯的《设计原本》,以及《信息简史》等。近年来,出版翻译作品近百万字。

媒体评论

读完本书映入我脑海的是电影《2001 太空漫游》(2001: A SpaceOdyssey)中的一个精彩场景。

在已遭遗弃的飞船“发现号”上度过了几个月,并把失控的超级电脑Hal 制服以后,David Bowman 博士来到一块巨石前,然后被带到了一个崭新的世界。他留给地球的最后一句话是:“满目皆星辰!”

软件密集型系统就是我们通过脑力劳动创造出来的崭新世界。Bowman看到的世界由原子构成,所以满目皆星辰 ;而我们的这个新世界由比特构成,所以——满目皆模式。

无论是有意栽花还是无心插柳,所有结构良好的软件密集型系统都用到了各种模式。识别系统中的模式,在分析系统时有助于提升抽象的水平;而在系统中运用模式,则有助于让系统变得更有秩序、优雅和简单。以我个人的经验来看,过去的二十多年来,模式是软件工程中最为重要的进步之一。

我有幸与 Jason 共事,从事改进 SPQR 的工作,容我向你们保证,他对模式实践背后的思想演进做出了巨大的贡献。本书有助于你打开有关模式的全新思路,将模式应用于自己所创造和维护的软件中,并促进其改进。如果你对模式还比较陌生,这本书是极好的入门读物;如果你已经熟悉模式,我希望你能温故而知新。我本人就受益良多。

                                  ——Grady Booch  IBM 院士

前言

本书介绍了一类全新的设计模式,称为元素模式(ElementalDesignPattern),其为软件工程设计模式的研究和应用打下了基础。元素模式深深植根于软件程序设计理论的研究,但其目的却在于实践性和实用性。从程序设计的新手,到资深的开发工程师,都是元素模式的目标受众。它能够带领学生加入软件工业的大军,也能够为研究者打开新的思路。

一言以蔽之,本书的写作目的在于为人所用。

读毕掩卷之时,你将在工具箱中收获一整套全新的工具,你将对日常的程序设计基本概念有更深入的理解,并知道它们是以怎样的方式联系和交互才产生了伟大的创意。元素模式,简称EDP,是一组基础的程序设计思想,我们本能地使用它们,而几乎不会去反思。但本书给予了它们正式的描述和标准的名字,以便在讨论时使用。本书还提供了一个框架来保证概念的一致性,并针对它们各自的特点加以比较。如果你是一个刚入学的学生,你将会了解到,如雨后春笋般涌现的设计模式文献并非要么全盘接受、要么全盘弃用的铁板一块,而是可以分解为若干片段来逐个取用、采用科学的方法论来一点点地理解的鸿篇巨著。如果你早已是软件设计和模式方面的行家里手,也仍然可以找到研究老办法的新视角,并发现我们这个行业里的新机会。

本书假定你对于设计模式领域曾多少有过一些了解和熟悉,但并未深度应用或研究过。仅仅知道存在这么一个领域,并对其有一些道听途说的认知,已经足够开展我们的讨论。本书并不期望你有程序设计理论或语言设计的背景,甚至不要求你精通一门面向对象的程序设计语言,只要你心怀渴望,想要学习软件设计的辩证思维即可。在本书中这些主题会有所涉及,但相关论述只能作为借助参考文献深入了解相关主题的出发点。本书将采用统一建模语言(Unified Modeling Language,UML)来描述一些小例子,如果你还不了解UML,请参考[20] 或[33]。你需要有一点点程序设计基础,面向过程或面向对象皆可,最好是后者,但这并不是必需的——本书内容已经把面向对象程序设计必知必会的信息打包成易于理解的模块了。经验丰富的面向对象程序开发工程师亦会有惊喜,发现自认为早已掌握的概念仍有新意,从而提升自己对于面向对象程序设计的整体认识。

许多程序员都把“设计模式社区”看作一个专家怪人的群体,认为自己并非其中一员。通过带给你新的视角,让你认识到设计模式是怎么来的,本书应该能说服你接受如下观点,即每一位程序员都是设计模式社区的一员,无论其自觉与否。每一位程序员在写下每一行代码的时候,都在运用设计模式,无论其是否这样去想。正因如此,有些选项近在眼前却被人弃如草芥。设计模式是一种共享的概念空间,我们在其中编织自己的电子梦想,并由此改变世界。是时候给出一张标识地界的地图了,这样我们才能更好地工作和享受。

遵循Gang of Four(GoF)[21] 树立的典范,本书亦分为两部分。前半部分讲述了本书为何而写,为谁而写,解释了什么是EDP,它源自何处,为何重要。该部分阐述的是基本理论,是EDP 背后的“为什么”。该部分还介绍了模式实例记法(Pattern Instance Notation),这是一种能和各种粒度级别上的模式协同工作的图表系统。前半部分的收尾章节讨论了如何使用EDP 来构建更大尺度的设计模式,以及如何与其协同工作。后半部分则是设计模式的大阅兵,以EDP为起点,通过案例来讲述它们如何以组合方式形成过渡模式,最后从EDP 组合的视角重新审视了若干GoF 设计模式。这里讲述的EDP 只是全部EDP 目录的一部分,只是首轮被定义和描述的基础模式集合。软件工程社区将不断地定义和精化更多的EDP,只要它们背后的概念能够生根发芽。我们期待你能参与其中。

热烈欢迎你的加入!

 

wKiom1PYtxLxMIltAAG9QHsbLAc092.jpg