元素模式

元素模式(最新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博士现在供职于华盛顿州柯克兰市的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,只要它们背后的概念能够生根发芽。我们期待你能参与其中。

热烈欢迎你的加入!

元素模式

时间: 2024-09-29 06:29:03

元素模式的相关文章

元素模式是单一关系的表现,是设计模式不可再分的最小单元

当我们在软件设计中想应用设计模式时,往往是凭借设计模式的名字和需求有点类似,之后就尝试着将模式生搬硬套到其中.而真正去理解设计模式往往变得比较困难,很多书籍也仅仅是用不同方法来降低模式记忆的强度.难道设计模式不能从更加细微的层面去理解吗?当然可以,设计模式就像可以再分解的化合物一般是可在分解,这种再分解后的模式叫做元素模式(elemental design patterns , EDP). 元素模式重申了一个非常重要的思想:模式是概念,而不是结构.GoF也这样认为:"假设某语言是面向过程的语言,

《元素模式》译后记

这本书译完至今已经有大半年了,电子工业出版社也在去年的九月正式出版了它.在此之后,我从审稿者以及读者手里得到的大部分反馈无非就是三个问题:为什么书名翻译成"元素模式"?这本书与<设计模式>这本书的关系是什么?这些模式有什么用?所以,我打算写一篇文章,谈谈我的看法. 首先,这本<Elemental Design Patterns>的书名,如果按照中规中矩的译法应该翻译成"设计模式要素",但看完全书,你会遇到一个问题,就是这本书讲的是32种可用各

php设计模式之单例模式(单元素模式)

单例模式: 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. (1). 需要一个保存类的唯一实例的静态成员变量:private static $_instance; (2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义: private function __construct() { $this->_db = pg_connect('xxxx')

IfcStructuralElementsDomain (结构元素领域)

IfcStructuralElementsDomain 提供了表示通常具有结构性质的不同类型建筑元素和建筑元素部分的能力.除了已在IFCSHARDBug元素模式中定义的一般使用的建筑元素之外,该架构还包含用于表示基础部分的实体,例如基脚和桩,以及包括在其他建筑元素中的一些重要结构子件,例如不同类型的显式加固部件,以及制造的特征和处理.该模式还包括一个类(ifcreinformationdefinitionproperties),用于定义钢筋要求. Types1 IfcFootingTypeEnu

IfcSharedFacilitiesElements (共享设施元素)

ifcsharedfacilitiesements定义设施管理(FM)域中的基本概念.此模式以及ifcprocesssextension和ifcsharedgmtelements提供了一组模型,这些模型可供需要共享设施管理相关问题信息的应用程序使用. ifcsharedfacilities元素模式支持以下想法: ①家具. ②将系统家具的元素分组为单个家具项. ③资产识别. ④物品清单(包括单独清单内的资产.家具和空间物品). 在IfcProductExtension模式中,IfcElement实

php面试题汇总四(基础篇附答案)

1. 什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明? 1.http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户. 2.SESSION存储在服务器端,COOKIE保存在客户端.Session比较安全,cookie用某些手段可以修改,不安全.Session依赖于cookie进行

PHP面试题

1.不用新变量直接交换现有两个变量的值 (1)list($a,$b)=array($b,$a);(2)a=a+b,b=a-b,a=a-b 2.PHP数字金额转大小格式,同时说明思路 function daxie($num){ $da_num = array('零','一','二','三','四','五','六','七','八','九'); $return = ''; $len_num = strlen($num); if(!is_numeric($num) || $len_num < 0){ r

五种常见的 PHP 设计模式

内容 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代

WebComponent

WebComponent 前言  最近加入到新项目组负责前端技术预研和选型,一直偏向于以Polymer为代表的WebComponent技术线,于是查阅各类资料想说服老大向这方面靠,最后得到的结果是:"资料99%是英语无所谓,最重要是UI/UX上符合要求,技术的事你说了算.",于是我只好乖乖地去学UI/UX设计的事,木有设计师撑腰的前端是苦逼的:(嘈吐一地后,还是挤点时间总结一下WebComponent的内容吧,为以后作培训材料作点准备. 浮在水面上的痛 组件噪音太多了!  在使用Boo