<设计模式>的阅读顺序
这个应该是繁体版的译者提出的意见。或许有用。大家看看吧。
http://groups.google.com/groups?q=uml%E6%A1%88%E4%BE%8B&start=10&hl=zh-CN&lr=&ie=UTF-8&oe=utf-8&selm=3fk1Dk%24XCF%40bbs.cis.nctu.edu.tw&rnum=14
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
OK
这个月我先把工作做好
下月抽出时间
问题不大,现在我还有时间应付。到下个月就忙了。
那边还好吧 这几天在偷懒 麻烦你们三个了
转过来了
模式的学习很多
而且很多可能要结合工作中的使用来理解更快吧
《对象导向设计模式》叶秉哲着, 培生出版。
全书已完工, 含索引共 476 页。
「近期」应可上市;至于「确切时间」嘛... 我也不知道... :q
以下是本书的相关介绍。
※ 封 底 文 案 ──────────────────────────────※
「本书在传授对象设计的技艺方面,有相当卓越的贡献!你是否曾经
想要描述某一个想法,但却苦无贴切精准的字眼来称呼它呢?很令人
沮丧吧!Design Patterns 这本书将一些在组织、生成、操作对象方
面千锤百炼的惯用法编辑成型录,更重要的是,它为这些设计组件一
一命名,让程序开发团队能有共通的沟通语汇。」
— Rebecca J. Wirfs-Brock, Director, Object Technology Services, Digitalk
「Design Patterns 将程序代码再利用 (code reuse) 的争论拋诸脑后
,展现给你软件再利用 (software reuse) 真正关键之处:可再利用
的设计 (reusable design)。你将迫不及待就会想要去运用、再利用
这些模式 (patterns)。」
— Steve Vinoski, Software Architect
「… [Design Patterns] 有两个重大的贡献。第一、它展示 patterns
在建构复杂系统时可扮演什么角色,第二、它提供非常实用的参考资
料,让软件开发者能将这些精良的 patterns 运用在自己的项目上。」
— 本书前言,Grady Booch, Chief Scientist, Rational
这四名顶尖的软件设计师,以丰富的对象导向软件设计经验,将频繁
出现却又非常精简的解决方案系统化汇编成型录。这 23 则过去未曾
见诸文献的 patterns,让软件设计者得以径行打造出更富弹性、更
优雅、以及最终目的:可再利用的设计,不必再去苦思相同的解决方
案。此书一出,旋即成为对象导向圈内人手一册的圣经,历久不衰。
探骊得珠,舍此弗由!
作者在对象导向软件领域都享有盛名:Erich Gamma 博士是加州
Taligent, Inc. 的软件工程师,Richard Helm 博士是加拿大蒙特娄
DMR Group 的资深技术顾问,Ralph Johnson 博士任职于美国伊利诺
大学香槟分校计算机科学系,John Vlissides 博士在纽约 IBM 的华生
研究中心从事研究工作。他们也因这本经典之作而有「四人帮」
(Gang of Four) 之誉。
原著网页:http://hillside.net/patterns/DPBook/DPBook.html
译本网页:http://william.cswiz.org/GoF/
※ 译 者 序 ────────────────────────────────※
凡所有相 皆是虚妄
应无所住而生其心
《金刚经》
● 知我说法,如筏喻者
人类渴望从变易万象中归纳出不易之理,以安身立命;更渴望此理是
简易的,以执简驭繁。于是,各睿智民族皆发展出统摄万物之理:像
古印度的四大(地水火风)、先秦易学的八卦(干兑离震巽坎艮坤)
、有汉以降道家系统的五行(金木水火土)等体系。先哲便据以「设
卦观象」,企图「为天地准,弥纶天地之道」。
尽管时代进步,学术分化,但各新生学门却承袭哲学的化约主义源流
;穷究简易、不易之理,似已成为人类的惯性。于是乎,公理公设系
统、基本粒子、最终理论、基因图谱成为圣杯,学界菁英都企图找出
体系内的基本单元及运作模式。
物理世界或许真有所谓「客观」的单元及模式,但人文世界呢?西洋
绘画传统可没有中国水墨画的「五墨、六彩」层次、秦兵马俑与希腊
雕像所歌颂的阳刚美又是多么泾渭分明啊!更令我们纳闷的是:为什
么德语的太阳是阴性、月亮是阳性、小女孩竟是中性?
不同人文环境,孕育出不同的模式,也孕育出不同的模式诠释;放诸
四海皆准的共通模式,似乎并不存在。人文世界的模式,与其说是反
映客观真实,毋宁说是反映这群人集体的主观心理投射。
即使只聚焦在特定人文环境中的特定单一客体身上,我们也未必真能
找出恰如其份的「模式」。以英语为例,专家皓首穷经编纂字典辞典
文法书,我们却不可能只凭这些书就学会活生生的英文;毕竟语言从
不会只死板板地照着书本所描述的样子运作,语言的音、字、词、语
法、语意、语用等层面,非笔墨所能道尽。
那么,寻求人文世界的模式,是否终归徒劳无功?倒也不尽然。英语
系人民固然不需要懂英文文法,但当他们要写作时,就不能不有下意
识的认知或正规训练(名小说家 Stephen King 近作《写作:我的作
家生涯》里不也透露,字汇、文法、风格是他重要的写作工具箱吗)
;对外国人来说就更别提了。
上等根器者,固然才气纵横不可扼抑,行于所当行、止于所不可不止
,但天才毕竟罕有,大多数学而知之、困而知之者,实在需要些虽不
完美、但仍有阶段性助益的指引。所以《金刚经》说:讲的法,像是
接引人渡河的筏;渡河之后,筏就可舍,不必死守不放。得与舍之间
的拿捏,就是智能。
本书 Design Patterns 即在描述「对象导向」这个思维体系中,四
位专家从主流应用程序、链接库、程序语言当中发掘、归纳、汇编的
23 则最基本、最常见的设计模式,助你渡过对象导向的湍流。
● 四人帮
雅典学院有三巨头(苏格拉底、柏拉图、亚里斯多德), OO 方法论
也有三巨头(Booch、Rumbaugh、Jacobson); 中国大陆文革时代有
四人帮,台大经济系有四人帮(张清溪、许嘉栋、刘鸾钏、吴聪敏合
着《经济学:理论与实际》教科书,故有此称),现在 OO 圈又有了
新的四人帮── 因为 Design Patterns 这本书太有名了,大家便多
以 "Gang of Four" 称之,或缩写为 "GoF"。
本书自 1994 年间出版以来,不仅是「量」排行榜的常客,更是「质
」排行榜的长青树。近年来重要的软件工程、对象导向、程序设计书
籍,鲜有不提到本书的。
还记得几年前 OO 萌芽时,赶新潮的人几乎都在摇头晃脑念念有词:
封装、继承、多型;多年后,它们已化为空气和水,成为不稀奇的常
识。如今,只要你稍有涉猎 framework、STL、COM、Java、middleware
、DOM、XML 等技术,不难发现,时髦词儿已换成 "iterator"、
"factory"、"adapter"、"observer" 等字眼。 这些词到底有多么重
要?C++ 爸爸 Bjarne Stroustrup 在 The C++ Programming Langauge,
3rd edition 的 §23.4.3.6 说得好:「设计师最好要熟悉特定应用
领域的流行模式……大量使用模式的人们,通常都会用特定术语词汇
便于彼此交谈,不幸的是,这些词汇形同是排挤他人步入门槛的私密
语言。」
这些怪词,已内化成应用程序、链接库、程序语言的一部份,变成行
话、语汇;Design Patterns 这本里程碑之书,更有加速催化之功。
我们可以说,不把本书内化成你的血肉,不仅难见宗庙之美百官之富
,甚至连同行之间的基本沟通都会有问题。
以积极面来说,本书有开光点眼之效,让你以更恢宏的视野处理对象
导向系统设计。阅毕,你会喟然叹曰:「天不生本书,万古如长夜!」
● 招式是死的,人是活的
有个笑话说:用惯锤子的人,会觉得眼前所见都是钉子,都想敲下去。
你会不会一看到突起的螺丝钉,就反射动作似的举起铁锤狠狠敲下去
,却忘了抽屉里还有更好用的螺丝起子?
设计模式是一种惯性,是一种基于形态美感而形成的心理惯性。但,
若不能跳出模式窠臼,就会忘了除了平仄对仗严整的律诗之外,原来
还有另一种宋词元曲之美。
孟子曰:「不以规矩,不能成方圆。」但,死抓规矩不放,就只能画
方圆。
愿读完这本规矩之书的你,不仅能描出够方的方、够圆的圆,更能徒
手画出美妙的不规则曲线。
叶秉哲 于风城交大 2001/02/28
http://william.cswiz.org/GoF/
本书能完成,要感谢许多人。Joan 小姐的鼎力支持,并容忍我的经
常拖稿,本书才能有较愉悦的版面呈现。王建兴和黄俊尧的细心审稿
,让我在技术上的补充较有自信,行文也更顺畅;把盏品茗之夜,更
激荡许多不凡的想法。IBM ThinkPad X20 卓越的表现,让我眼睛、
手指都能乐于其中,完全满足我对笔记型计算机的个性要求。末了也要
感谢孟君容忍我这些日子的心有旁骛…… :)
※ 作 者 序 ────────────────────────────────※
这并不是一本介绍对象导向技术或设计的入门书,坊间已经有太多这
类的书了。本书假设你已经熟悉至少一种对象导向程序语言,也已经
有一些对象导向设计经验,当我提到「型别」(type)、「多型」
(polymorphism)、「接口继承」(interface inheritance) 和「实作
继承」(implementation inheritance) 字眼时,你也不必再去偷查
字典。
不过这也不是一份艰深的技术论文,本书探讨的是在对象导向软件设
计领域里,用以描述对特定问题精简优雅的解决方案:设计模式
(design patterns)。 设计模式将长期演进的解决方案捕捉起来,因
此它们和一般人最初想得到的设计方法未必相同;这些轨迹再再反映
出开发者不断精雕细琢以追求更高的软件再利用性和弹性。设计模式
捕捉这些解决方案,整理成简明易用的形式。
设计模式并未动用到罕见的程序语言特征,也没有动用会令你的朋友
或上司大吃一惊的诡异编程花招,它们全都可用标准的对象导向程序
语言来实现。即使设计模式可能会比你以前蛮干的做法麻烦一些,但
这是值得的,你会获得更大的弹性和再利用性。
一旦你了解了设计模式,开始发出「啊哈!」惊叹声而非「喔?」怀
疑声时,你对对象导向设计的观点必定截然不同,你会洞悉让你的设
计更富弹性、更模块化、更具再利用性、更易为人理解的秘诀──这
不正是你对对象导向技术感兴趣的初衷吗?
最后再给你些警告和鼓励的叮咛:如果你读了第一遍之后仍无法完全
读懂,别担心,就连作者本人在动笔时也不敢说我们完全都懂了呢!
切记:这不是一本浏览一遍即可束诸高阁的书,我们希望你能够一再
翻阅,从中汲取设计洞见,引发灵思。
本书怀胎期相当久,她待过四个国家,目睹三位作者成亲,以及两个
孩子的诞生。许多人催生本书有功,
[......略, 详见网站里的 PDF 檔]
※ 前 言 ─────────────────────────────────※
任何精良的对象导向架构,必定充满设计模式。的确,当我在衡量物
件导向系统的品质时,其中一种方法就是去看看开发者是否投入足够
的心力去处理对象之间的互动关系。在系统开发阶段就注重这些机制
,可产生更精简、更易理解的架构,远胜于那些忽视设计模式的系统。
在其它同样需要建构复杂系统的领域里,模式的重要性早已无庸置疑
。尤其是 Christopher Alexander 与其同僚,可能是第一位提倡以
模式语言 (pattern language) 来规划建筑和城镇的人,如今他所引
发的思想已深植在对象导向软件社群中。简言之,软件设计模式的观
念,让开发者得以吸收其它高手的设计经验并引为己用。
本书作者 Erich Gamma、Richard Helm、Ralph Johnson 和 John
Vlissides 引介设计模式的基本原则并予以编目,因此,本书有两大
贡献。第一、它展示模式在建构复杂系统时可扮演什么角色,第二、
它提供非常实用的参考资料,让软件开发者能将这些精良的模式运用
在自己的项目上。
我很荣幸有机会与几位作者共事过,从他们身上学到了很多,我深信
读者您也会和我有一样的感受。
Grady Booch
Chief Scientist, Rational Software Corporation
※ 导 读 ─────────────────────────────────※
本书主要分为两大部份。第一部份(第一、二章)介绍设计模式是什
么,以及它在你设计对象导向软件时能帮上什么忙,这里也举出一个
具体案例实际说明该如何运用它。本书第二部份(第三、四、五章)
则是设计模式的型录。
设计模式型录是本书的主要部份。我们将设计模式分成三大类:生成
类 (creational)、结构类 (structural)、行为类 (behavioral)。
这份型录有好几种使用方法,你可以从头到尾依序研读,也可以跳着
阅览,你更可以一次读完一整章,这会让你对相关模式之间的异同更
了然于心。
请善用每则设计模式所附的交互参考信息,以深刻体认各设计模式之
间的合纵连横关系。图 1.1(原著第12 页)即在描绘这种交互信息。
你也可以用任务导向方式来研读这份型录。请先跳到 1.6 节(原著
第 24 页)看看在设计可再利用之对象导向软件时哪些问题会经常出
现;然后再对症下药,研读对应的设计模式处方。有些人则是先将这
份型录从头到尾略读一遍,尔后再以任务导向角度挑出可运用在手边
项目的设计模式。
如果你还不算是对象导向设计老手,我建议你先从下列这些最简单、
最常见的模式着手:
* Abstract Factory (87) * Adapter (139)
* Composite (163) * Decorator (175)
* Factory Method (107) * Observer (293)
* Strategy (315) * Template Method (325)
就这些设计模式而言,对象导向系统很难没有用上一二,大型系统更
是几乎全都用上。我相信它们能够带你进入设计模式的大门,更让你
了解什么才是好的对象导向设计。
● 补充:关于此译本
译者再针对四个地方做些补充:模式名字处理原则、页码、图形、建
议阅读顺序。
本书所列的 23 则模式名字,是圈内人应该朗朗上口默志于心的语汇
;译为中文反而别扭,有碍交流,更有碍程序代码的直观理解──君不
见在 API 爆炸的年代,俯拾皆是形如 wwwAdapter、xxxFactory、
yyyIterator、zzzObserver 的类别或接口? 我想很少人会在心中默
念「这是『www 转换器』、那是『xxx 工厂』、这是『yyy 光标』、
那是『zzz 观察者』」吧?因此,本书保留所有模式名字不译,但会
在各模式所在章节用【释名篇】方式让你对古怪的英文名词焕然冰释。
Design Pattern 原著中,「页码」用得很凶。除了在书末索引里面
,想当然尔到处都是页码之外,因为该书尚有「型录」目的,为了便
于读者交互参考查阅 (这也算是一种传统纸张版的 hyperlink 吧,
呵),所以在提到每一则设计模式时,几乎都会顺便告诉你「原著的
第几页有该模式的完整探讨」。就以前一页为例,作者在提到
「Observer」这则模式时,还附上这则模式所在的页码「293」,
两者常常合起来写成「Observer (293)」。
如果译本完全和原著页页对应,会有几个好处:
* 完整保留原著的「Observer (293)」字眼,不必针对中译本改写数字。
* 书末索引不必重新改写数字。
* 方便因为某些原因,需要将中英版本相互对照的读者。
不过,中英文排版美学不同,字距行距均有别;译者又喜欢三不五时
穿插些「译注」补充些个人心得,如果硬是要求每一页都得和原著完
全相同,未免太削足适履了些。有鉴于此,我在译本的左右留白处,
┌──┐
用│ 293│这样的方框标明该段落是由原著第几页翻译过来的 ──
└──┘
感谢《心理学》(注1) 和《西洋政治思想史》(注2) 等译书带给译者
这样的灵感。 :) 同理,在字里行间,你只要一看到像「293」这样
的字体(如「Observer (293)」),就知道它指的是原著的页码。
任何一本探讨对象导向设计的书,都免不了要画些图形,以有效传达
对象类别之间的种种静态与动态关系。不过,对象导向方法论派别林
立,各据山头,各拥其主,该采用哪一种图标呢? 1994 年出版的
Design Patterns 原著,以当时的时空背景,选择以 OMT 为主、
Objectory 和 Booch 为辅,取最大公约数,允为四平八稳之举。
时空拉回到 20、21 世纪交接的年代,鉴于这三派已整合成为 UML
(Unified Modeling Language),且已有OO 图标法主流的态势,译者
乃大胆将原著图形改绘成 UML,对现在读者而言应该是较好的方式。
我建议读者们,先读读附录B, 对 UML 有概括的印象,会更容易正
确掌握设计模式的细节;本书封底内页也列有这些图形的简单摘要,
可做为速查指引。 当然啦,如果您已熟悉 OMT 但还不认识 UML,附
录B也有提到两者的差别,可帮助您快速转移到 UML。
我也建议读者先阅读附录A的名词解释,除了让您更正确掌握设计模
式的细节之外,还有几个作用:
* 让我们对本书译名有个初步共识。
* 我补充了一些 C++ 和 Java 的相关实作信息。
* 为了节省篇幅,凡是在附录A提过的事情,我就不在正文里重复
,而是请读者去翻阅附录A相关条目。
本书的第三章到第五章,颇有字典的味道。虽然有人以逐页研读字典
为乐(像林语堂大师),但我们多半都只是当工具书来查考。同理,
如果您暂时不想有系统地研读 Design Patterns,不妨随兴一点,先
从自己的背景或偏好来下手。譬如说:
* 懂 C++ 的人,不妨先选读 Iterator、Adapter、Bridge、Strategy。
* 懂 Java 的人,不妨先选读 Decorator、Observer、Composite。
* 懂分布式系统的人,不妨先选读 Observer 及 Proxy。
* 懂 COM 的人,不妨先选读 Factory Method 及 Proxy。
* 懂应用程序框架(如:MFC)的人,不妨先选读 Builder 及 Template Method。
* 对语法剖析技术有兴趣的人,不妨先选读 Interpreter 及 State。
* 对设计跨平台系统有兴趣的人,不妨先选读 Abstract Factory 及 Bridge。
再不然,你也可以先读第二章〈个案研究:文书处理器设计〉,一路
走下去就能学到八个活生生的模式。
假如你想整个研读一遍,却不知从何开始,不妨参考一下网络上的读
书会资料。像 Joshua Kerievsky 在 A Learning Guide to Design
Patterns (注3) 一文中, 除了列出相关的读书会团体,也以他主持
近三年的读书会经验,提出一份循序渐进的建议阅读顺序:
Factory Method → Strategy → Decorator → Composite → Iterator →
Template Method → Abstract Factory → Builder → Singleton → Proxy →
Adapter → Bridge → Mediator → Observer → Chain of Responsibility →
Memento → Command → Prototype → State → Visitor → Flyweight →
Interpreter → Facade
如果你有兴趣在公司、学校、社群之间组个 Design Patterns 读书会
,更是不能错过它所列的许多读书会运作细节及脑力激荡问题。
注1: 杨语芸译,桂冠出版,1994年12月。
注2: 彭淮栋译,商业周刊出版,2000年2月。
注3: 网址:http://www.industriallogic.com/papers/learning.html