元素模式(最新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. Smith,2005 年毕业于北卡罗莱纳州立大学教堂山分校,获计算机科学博士学位。该校也是元素模式的诞生地,元素模式当时是模式查询和识别系统(System for Pattern Query and Recognition,SPQR)项目的组成部分。Smith 博士因其在校的研究项目而荣获两项美国国家专利,一项与SPQR 所采用的技术相关,另一项则来自 FaceTop 分布式文档协作系统。
此前,Smith 博士在物理仿真工程和咨询界工作过多年,取得了华盛顿州立大学的物理学和数学学士学位,值得一提的项目包括声纳和海洋环境仿真、电子工程仿真、商用和军用飞机飞行仿真,以及实时图形训练系统等。
在 IBM 沃森研究中心工作的四年,使 Smith 博士有机会将从 SPQR 和EDP 目录中获得的经验加以组织,并应用到大量的软件实体中,包括遗留系统和现代系统。
Smith博士现在供职于华盛顿州柯克兰市的The Software Revolution公司,任资深研究科学家。在那里,他持续地优化 EDP 目录,并寻找各种方法来推进公司在自动控制现代化及遗留系统改造方面的业务目标。
译者简介:高博,1983年生,毕业于上海交通大学。目前在EMC中国卓越研发集团任首席工程师,在信息科学和工程领域有近15年实践和研究经验。酷爱读书和写作,业余研究兴趣涉猎广泛。译著包括图灵奖作者高德纳的《研究之美》和布鲁克斯的《设计原本》,以及《信息简史》等。近年来,出版翻译作品近百万字。
媒体评论
读完本书映入我脑海的是电影《2001 太空漫游》(2001: A Space Odyssey)中的一个精彩场景。
在已遭遗弃的飞船“发现号”上度过了几个月,并把失控的超级电脑Hal 制服以后,David Bowman 博士来到一块巨石前,然后被带到了一个崭新的世界。他留给地球的最后一句话是:“满目皆星辰!”
软件密集型系统就是我们通过脑力劳动创造出来的崭新世界。Bowman看到的世界由原子构成,所以满目皆星辰;而我们的这个新世界由比特构成,所以——满目皆模式。
无论是有意栽花还是无心插柳,所有结构良好的软件密集型系统都用到了各种模式。识别系统中的模式,在分析系统时有助于提升抽象的水平;而在系统中运用模式,则有助于让系统变得更有秩序、优雅和简单。以我个人的经验来看,过去的二十多年来,模式是软件工程中最为重要的进步之一。
我有幸与 Jason 共事,从事改进 SPQR 的工作,容我向你们保证,他对模式实践背后的思想演进做出了巨大的贡献。本书有助于你打开有关模式的全新思路,将模式应用于自己所创造和维护的软件中,并促进其改进。如果你对模式还比较陌生,这本书是极好的入门读物;如果你已经熟悉模式,我希望你能温故而知新。我本人就受益良多。
——Grady Booch IBM 院士
前言
本书介绍了一类全新的设计模式,称为元素模式(Elemental DesignPattern),其为软件工程设计模式的研究和应用打下了基础。元素模式深深植根于软件程序设计理论的研究,但其目的却在于实践性和实用性。从程序设计的新手,到资深的开发工程师,都是元素模式的目标受众。它能够带领学生加入软件工业的大军,也能够为研究者打开新的思路。
一言以蔽之,本书的写作目的在于为人所用。
读毕掩卷之时,你将在工具箱中收获一整套全新的工具,你将对日常的程序设计基本概念有更深入的理解,并知道它们是以怎样的方式联系和交互才产生了伟大的创意。元素模式,简称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,只要它们背后的概念能够生根发芽。我们期待你能参与其中。
热烈欢迎你的加入!
相关推荐
想知道为什么《Elemental Design Patterns》的书名被翻译成了“元素模式”吗?想知道这本书与《设计模式》这本书的关系是什么吗?如果你的回答是肯定的,那么不妨就从现在开始阅读这本元素模式吧!这是一本内容极具...
想知道为什么《Elemental Design Patterns》的书名被翻译成了“元素模式”吗?想知道这本书与《设计模式》这本书的关系是什么吗?如果你的回答是肯定的,那么不妨就从现在开始阅读这本元素模式吧!这是一本内容极具...
本书介绍了一类全新的设计模式,称为元素模式(Elemental Design Pattern),其为软件工程设计模式的研究和应用打下了基础。元素模式深深植根于软件程序设计理论的研究,但其目的却在于实践性和实用性。从程序设计的...
涉及设计模式的资料已经很多了,各种模式已经有上千种,虽然通常用到的不多,但是如何熟练地在不同场合使用不同模式,依然是有相当难度,各类社区致力于总结经验并指导大家学习,可在很多时候...这也是元素模式的根本
《一种具有优化元素模式的相控阵天线设计》是一本深入探讨线性和平面相控阵天线技术的专业著作,特别关注于扇形和轮廓元素模式的优化设计。这本书由六章节构成,作者在书中详尽阐述了他在该领域的研究成果,并将其与...
REE 元素配分模式图的绘制 REE 元素配分模式图是地质学中一种重要的研究手段,用于分析和描述地质样品中的稀土元素组成和变化规律。REE 配分模式图的绘制可以帮助研究人员更好地理解地质样品的地球化学特征和演化...
单一元素模式(Singel)是一组规则/最佳实践,可在React和其他基于组件的库中创建一致,可靠和可维护的组件。 这是基于这样的想法,即应用程序的构建块应尽可能类似于本机HTML元素。 这个仓库是一个CLI工具,用于...
ISO/IEC TR 23613《信息技术 云计算 云服务计量元素与计费模式》正是为解决这个问题而制定的国际技术报告。 在该报告中,首先对云服务计量、云服务计费、计量单位和计量元素等基本概念进行了定义。这意味着,有了...
CSS基础-选择器进阶+背景属性+元素显示模式+三大特性 CSS基础选择器进阶: 在CSS中,选择器是用于选择HTML元素并应用样式的核心机制。选择器进阶是指在基础选择器的基础上,进一步学习和应用选择器的高级规则和...
3. **迭代器模式**:迭代器模式是行为型设计模式,它允许我们遍历集合对象的元素而无需暴露其底层表示。迭代器模式提供了一种方法顺序访问聚合对象中的元素,而无需暴露其底层结构。在Java中,迭代器模式广泛应用于...
- **阵列元素模式**:单个天线元件的辐射模式。 - **阵列因子**:仅依赖于阵列几何结构和天线元件激励(幅度、相位)的函数。 #### N-元线性阵列 对于N-元线性阵列,假设所有天线元件完全相同,则阵列因子(Array ...
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式是通过接口实现的,这使得我们可以遍历任何实现了`Iterable`接口的对象,例如集合框架中的`...
2.css的元素显示模式 html元素一般分为块元素和行内元素 (1)块级元素 div p h1-h6 ul ol li ①独占一行 ②宽度 高度 外边距 内边距都可控制 ③宽度默认是容器(父级元素)100%的宽度 ④是一个容器及盒子 里面...
Embedded Element Pattern(嵌入元素模式)可能是在这个ATX数组建模中采用的一种特定设计策略或编程模式,它涉及到将元素或组件嵌入到更大的结构或系统中,以优化性能或提高效率。 在IT领域,数组建模常用于处理大...
模板使用`<xsl:template>`标记,包含一个`match`属性,该属性定义了模板所匹配的XML元素模式。样式表的根元素必须是`<xsl:stylesheet>`,并可能包含名称空间声明,例如: ```xml <!-- 其他模板 --> ``` ...
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式允许我们遍历集合中的每个元素,同时保持集合本身抽象,不需了解其内部结构。 在Java、C#等面向对象语言...
迭代器模式的主要目的是让开发者能够轻松地遍历聚合对象中的元素,而不需要关心对象的内部实现细节。 在迭代器模式中,存在三个主要角色:迭代器(Iterator)、聚合对象(Aggregate)和客户端(Client)。迭代器...
扩展了阵列综合工具,以允许每个阵列使用多个元素模式,并允许直接使用集合中现有天线设计的元素模式。 基本阵列运算符已扩展为包括具有复制和相移选项的镜像运算符。 现有的“基本旋转和平移”运算符已更新,以...
6. **稀土元素模式曲线**:分析了不同曲线可能代表的岩石类型,反映了稀土元素在不同类型岩石中的分布模式和地球化学行为。 这些内容体现了地球化学在理解和解析地球历史、地质过程以及矿产资源形成等方面的重要性...
4. **模式匹配**:在稀疏矩阵中,模式匹配可能涉及到寻找特定的子矩阵或者特定的非零元素模式。这在图论问题、网络分析或文本挖掘中可能很重要。高效的模式匹配算法可以极大地提高问题解决的速度。 5. **特殊矩阵**...