《设计模式沉思录》目录—导读


《设计模式沉思录》目录—导读

版权声明
设计模式沉思录
Authorized translation from the English language edition, entitled Pattern Hatching: Design Patterns Applied, 9780201432930 by John Vlissides, published by Pearson Education, Inc., publishing as Addison-Wesley Professional. Copyright © 1998 Pearson Education, Inc.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

CHINESE SIMPLIFIED language edition published by PEARSON EDUCATION ASIA LTD. and POSTS & TELECOM PRESS Copyright © 2015.

本书中文简体字版由Pearson Education Asia Ltd.授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。

本书封面贴有Pearson Education(培生教育出版集团)激光防伪标签,无标签者不得销售。

版权所有,侵权必究。

内容提要
设计模式沉思录
本书在GoF的《设计模式》一书的基础上进行了拓展,运用其中的概念,介绍了一些技巧,帮助读者决定在不同的情况下应该使用哪些模式,以及不应该使用哪些模式。本书不仅对已有的一些模式提出新的见解,还让读者见证开发新模式的整个过程。

本书适合使用设计模式的软件开发人员阅读。

译者序
设计模式沉思录
我接下本书的翻译工作的时候,正值《Windows核心编程(第5版)》翻译完成,中文版新书上架后没多久。翻译《Windows核心编程(第5版)》耗时9个多月,这是与另外两位译者一起合作完成的一本700多页的大部头。这项工作让我感觉有些疲惫,原本想好好歇一歇,不料却邂逅本书。

最终,我无法拒绝,接下了本书的翻译工作,主要出于两方面的原因。首先,作为一名设计模式的拥护者和践行者,我非常高兴地看到另一本与设计模式有关的重要著作在问世10多年后即将在国内出版,同时也希望自己能够为国内的设计模式社区尽一份绵薄之力。其次,本书的英文原版不到200页,在翻译了《.NET设计规范》和《Windows核心编程(第5版)》两本译作之后,我满怀信心地认为自己应该可以很快完成。

事实很快证明我错误地估计了翻译本书的工作量,而且错得不轻。本书虽然短小,但却当之无愧地是我翻译过的最难的技术书籍,以至于在开工后不久我不得不向出版社告急,要求对原先的翻译进度和出版计划进行调整。这本不足200页的书最终花了我将近半年的时间才完成,这远远超出了我的预期。出版社的编辑工作同样反映了本书的难度,译稿在2009年上半年就已交付给出版社进行编辑,但最终出版上架却要到2010年初,其难度可见一斑。

正是由于这个原因,最初交付的中文版译稿并未能完全达到我希望的流畅程度。对我来说,虽然我尽量追求译文的准确和流畅,但当两者不能兼得时,我会牺牲语言的流畅来保证内容的准确。在此我要感谢本书的编辑陈兴璐小姐和图灵公司的总经理武卫东先生,是他们的编辑和润色使得本书变得更加流畅。即便如此,书中难免还会存在一些生涩的字句和不够流畅的地方,甚至是错误之处。作为译者,我对此负有全部责任。为此我建立了一份网上勘误表, 如果读者发现任何错误,都请通过该网页与我联系,一旦确认我会立即将其更新到勘误表中。勘误表的网址为www.gesoftfactory.com/ge/Pattern-Hatching/。

我要感谢我的同事吴宇进、田超和张险峰,是他们在繁忙的工作之余审阅译稿,提出了许多宝贵的意见和建议,从而使得本书的质量更上一层楼。最后,我要感谢我的妻儿,他们的支持和鼓励,是我前进的动力。

本书不仅通过一些通俗易懂的实例对如何运用设计模式进行了深入的讲解,而且还介绍了一些新的设计模式。但与其他的设计模式书籍相比,本书的独特之处在于向读者揭开了模式开发的神秘面纱,让读者了解模式背后鲜为人知的一些故事,并领略其中的苦与乐。我满怀着激动和忐忑之情,将这本设计模式领域的重要著作的中文版呈现给国内的广大读者。希望本书能够帮助你们更好地理解和运用设计模式,甚至有朝一日编写出自己的模式!

葛子昂

2010年3月


设计模式沉思录
John写信告诉我,他打算为C++ Report撰写模式专栏,他的这个决定填补了我生命中的一个空白。具体来说,他一年填补了大概5个空白——那时我正在撰写一个关于模式的专栏,每两个月一期,Stan Lippman建议我和John轮流撰写。John主要关注设计模式,而我在专栏中将继续关注更为广泛的主题。我们俩搭档把模式介绍给C++社区,对此我感到兴奋。不仅如此,我也喜欢John介绍这个主题的方式。我在给他的信中写到:

孵化(hatching)的比喻不仅讨人喜欢,而且很有道理。我刚刚又阅读了Alexander的Notes on Systhesis第2版的前言,显然他认为对那些潜藏在自然中的事物,我们应该去挖掘和发现它们,而不是关注创造它们的“方法”,甚或是从其璀璨的裂缝中窥探它们。

能够与GoF(模式四人组)之一共同写专栏,我不仅感到高兴,更感到荣幸。如果没有GoF的《设计模式》一书,读者也许都不曾听说过模式。通过对模式的介绍,该书成为了这个全新科目的极佳教材。GoF的23个设计模式奠定了一个不大但却非凡的基础,并发展壮大成为我们今天知道的模式社区。而凭借本书读者可以直接深入了解GoF作者之一John的思考过程,同样对更加广阔的过程有一些间接的了解。

为了总结出一个好模式,突破一些局限在所难免,就像小鸡破壳而出,而John的专栏对那些在《设计模式》背后发生的“破壳”的对话进行了探索。例如,John在类结构不断演变的情况下,对Visitor的限制进行了探索。他还谈论了一些模式,比如GENERATION GAP(见本书的第3章)。这些模式未能被收录到《设计模式》中,但它们可能已经足够好了,值得公之于众。读者会发现GoF关于MULTICAST模式的对话,这段对话让John陷入沉思:“一旦了解了我们在模式开发过程中所经历的混乱,那些认为GoF具备非凡能力的人一定会感到震惊。”本书传达了一个重要的事实,它没有出现在更为学术化和更加完善的《设计模式》一书中:模式源自一群认真努力的程序员,虽然他们不可能每次一开始就把事情都做对,但他们努力地让那些重复出现的设计实践变得实用。我认为阅读本书的模式用户将会感谢GoF为他们的模式而付出的心血,我还认为阅读本书的模式编写者在今后发掘和编写模式时会比以前更加谦逊和勤勉。

乱中求序是自然科学的主旋律,那么,我们不应该认为设计的科学会有任何的不同之处。模式是人们在工作*同发现一些构成人们高品质生活的因素,并将它们加以记录的整个过程。这不可避免是个有机过程。贯穿本书,读者将得以洞察各模式背后的有机过程,得以了解普通(但非常有经验而且非常尽职的)软件开发人员在努力形成自己对设计的理解时的思考过程。《设计模式》是对他们集体理解的提炼,而本书是对产生理解的过程的提炼,我们不应该低估它在解释GoF模式方面所带来的价值。请允许我引用一封我在1997年晚些时候收到的来自Richard Helm的信,我相信它进一步证实了这一点。

GoF的设计模式只解决了微观架构(micro-architecture)。你仍然必须把宏观架构(macro-architecture)设计好:分层、分布、功能隔离……。而且就像Cope说的,你仍然必须把纳米架构(nano-architecture)设计好:封装、Liskov……。在所有这些中的某个地方,你也许会用到一个模式,也许用不上。即使用上了,也可能和某本书中的介绍和描述很不一样。

这本书将帮助你理解如何将《设计模式》——其实是任何关于设计模式的书籍——当作一本珍贵的指南,而不是当作一些累赘的规定。它可以帮助你在更广阔的面向对象设计的基本原则下,将设计模式运用到合适的地方。它道出了虽然不正式但却严格的标准和紧张的迭代过程,《设计模式》中的23个模式正是基于这样的标准,经历了这样的迭代过程产生的。知道有这样的过程,以及这样的过程如何发生,让人感到释然,因为它把模式带回到更加讲究实用的日常工作中。我认为这将有助于读者认识到必须根据手头的问题来对模式进行调整,有助于读者加入自己的思考而不仅仅是盲目地遵循“某本书中说过的”教条。我不认为计算机科学家会喜欢这本书,但现实的程序员会反复品味,获得共鸣,并高度欣赏它。

James O. Coplien

朗讯科技公司

贝尔实验室

前言
设计模式沉思录
我永远不会忘记1994年秋天的那个下午。那天我收到一封来自Stan Lippman(时任C++ Report杂志的主编)的电子邮件,他邀我为该杂志撰写一个专栏,该专栏每两个月一期。

我们算得上是老相识了,早在他参观Watson实验室的时候我们就认识了。那一次我们简单地聊了他在开发工具方面所做的工作,以及GoF在模式方面所做的工作。与那时大多数人不一样的是,Stan熟悉模式的概念——他接连阅读了《设计模式》的一些预览本,并说过一些令人鼓舞的话。尽管如此,我们的谈话很快就转移到了写作上。随着谈话的进行,我记得自己愈加炫耀起来,仿佛我已经不是自己了。而Stan,这位知名的专栏作家,是两本非常成功的图书(还有一本即将出版)的作者,却称自己的写作只是业余水平。我不清楚我们的谈话是否让他感到愉快,还是在他的下一个约会之前他一直都在耐着性子和我谈话。(此后我认识到,如果还有什么能胜过Stan的忍耐力,那就是他的真诚!)

几个月后我收到他的电子邮件,心潮起伏,此前的歉疚感就不值一提了。想象着自己为全球的读者定期撰写专栏,这既让我兴奋,又让我恐惧。写了几次之后我是否还能继续?人们是否在乎我写些什么?我应该写些什么?我写的东西对别人是否有帮助?

我在恐惧中沉溺了将近一小时。然后我想起我父亲的一些告诫:局促不安只能使人无所作为。只要关注最基本的东西,其他东西会随之而来的。“只管去做”(Just do it),他说这句话比耐克要早得多。

于是我就接受了。

选择专栏主题非常容易。那时我深陷于模式的研究中已有三年了。我们最近刚完成《设计模式》,但我们都知道它远远没有说完这个话题。专栏会是一个很好的论坛,可以对《设计模式》一书进行解释,可以对它进行扩展,还可以在新问题出现时展开讨论。如果说专栏有助于《设计模式》图书的销售,那也无妨,只要它立场公正,不乱吹嘘。

现在,我的“模式孵化”专栏已经连载了10多篇文章了,回过头看,我的恐惧是没有依据的。我从来没有因为要找东西写而为难,而且写作时我乐在其中。我还从世界各地收到了大量令人鼓舞的反馈,包括一些人要求阅读过去的专栏,而且这样的要求一再出现。后来我想到了把我的专栏,以及其他一些尚未发表的关于模式的材料,汇编在一起提供给大家。

本书就是要达到这个目的。读者将在书中找到我前三年专栏写作生涯中的思考和想法,其中包括发表在C++ Report和Object Magazine中的所有文章,加上一些零碎的新见解。我按照逻辑的顺序来组织内容,而不是通过时间顺序来组织内容,其目的是为了使所有的内容能够像书本一样连贯。这样的组织比我想象的要容易一些,因为许多文章既是这个系列的一部分,又是那个系列的一部分,当然这仍然需要耗费大量的精力。我衷心地希望读者能够喜欢最终的结果。

致谢
一如既往,我要感谢许多人为我提供各种各样的帮助。首先最重要的是我的GoF成员——Erich Gamma、Richard Helm以及Ralph Johnson。他们每一个人都在不同的时刻为我提供了宝贵的反馈,这些反馈汇集在一起使本书成为了一本更加不同(当然是更好)的图书。我们几人互补性强,如同天成,遇见他们是我三生有幸,我由衷地感谢他们。

然而,同样的帮助也来自其他人。还有许多人花时间研读草稿,为的是找出不合逻辑的论述、不当的言辞,以及大家都再熟悉不过的笔误。他们是Bruce Anderson、Bard Bloom、Frank Buschmann、Jim Coplien、Rey Crisostomo、Wim De Pauw、Kirk Knoernschild、John Lakos、Doug Lea、Bob Martin、Dirk Riehle以及Doug Schmidt。特别感谢Jim,他是我在C++ Report的拍挡,不仅因为他为本书作序,更因为他是如此多才多艺,总是激励我奋进。

接下来要感谢的完全是一些陌生人,他们给我发电子邮件问我问题,提出意见,纠正我的错误,并给我以善意的责备。有许多这样的人,在这里我只列出了本书引用了他们的话的人,或者他们的意见与本书直接相关的人:Mark Betz、Laurion Burchall、Chris Clark、Richard Gyger、Michael Hittesdorf、Michael McCosker、Scott Meyers、Tim Peierls、Paul Pelletier、Ranjiv Sharma、David Van Camp、Gerolf Wendland和Barbara Zino。虽然很多人我没有提到名字,请相信我同样感谢你们的反馈。

最后,我要感谢两个家庭,一个是我自己的家人,另一个是我亲如一家的同事,你们对我的支持我无以言表。我欠你们的太多了。

J.V.

vlis@watson.ibm.com

1998年1月于纽约州霍索恩市

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

目录
前言
第1章 介绍
1.1节对模式的十大误解
1.2节观察
第2章 运用模式进行设计
2.1节基础
2.2节孤儿、孤儿的收养以及代用品
2.3节“但是应该如何引入代用品呢?”
2.4节访问权限
2.5节关于VISITOR的一些警告
2.6节单用户文件系统的保护
2.7节多用户文件系统的保护
2.8节小结
第3章 主体和变体
第4章 爱的奉献
第5章 高效模式编写者的7个习惯
参考文献

欢迎来到异步社区!

上一篇:PHP实现一个简单url路由功能


下一篇:kubernetes controller源码解读之StatefulSet