逸言

Java设计模式译者序

| Comments

如今,介绍和讲解设计模式的书籍可谓汗牛充栋。无论是定义、解读、延伸还是扩展,都是基于面向对象的设计原则,用了放大镜对着GOF提出的23种设计模式,如科学解剖一般,剖析每一道脉络,观察每一片纹理,细微至纤毫毕现,真可以说是道尽个中妙处;许多精妙阐述,又如黄钟大吕,振聋发聩,醍醐灌顶。

是否设计模式的精妙之处,业已为这些著作所穷尽?然,又未必尽然!以模式而论,若只局限在这23种模式的范围内,几乎每种模式的变化,都可以被悉心推演出来;每种模式的结构,也已被阐述得淋漓尽致。然而,若论及设计,则如大道苍穹,实则是不可穷尽的。基本上,设计的复杂程度已不亚于一个纷繁的世界,而软件,就是我们要构造的这个世界。

因此,再出现一本讲解设计模式的书,就不足为怪了。那么,它值得你去阅读吗?

讨论一本书是否值得阅读,应基于书本身的价值去判断,判断的标准则依据读者的目标而定。从读者而非译者的角度看待本书,个人认为,它确乎是有价值的。这些价值主要体现在三个方面。

GOF对于23种设计模式的分类已经深入人心,即众所周知的创建型模式、结构型模式与行为型模式。这一分类浅显易懂,明白无误的表达了模式的意图与适用场景。但是,这一分类仍有不足之处。例如建造者模式除了关注对象的创建之外,还需处理好对象之间的结构;又例如桥接模式对于抽象与实现的解耦,在一定程度上又体现了对行为的抽象;再比如行为模式中的迭代器模式,其实还涵盖了创建迭代器的职责。本书对于设计模式的分类不落窠臼,根据作者对于设计模式的思考,别出心裁地给出了自己的一种分类,即分为接口型模式、职责型模式、构造型模式、操作型模式与扩展型模式。如果仔细阅读和思考这些模式,你会发现这五类分类很好地抓住了相关模式的设计本质。譬如,扩展型模式关注的是代码功能的扩展,因而很自然地就可以把装饰器模式与访问者模式归入这一类。

彰显本书价值的第二方面在于贯穿本书始终的习题练习,作者将其称之为“挑战”。确实如此,这些挑战仿佛是作者故意为读者设定的“陷阱”,“障碍”,是登堂入室所必须跨过的门槛。最关键的一点是,通过这些“挑战”,就从单方面的灌输知识,变成了一定程度的双向互动。作者就像课堂上的老师,提出问题引人思考;读者就是学生,面对老师“咄咄逼人”的提问,必须打起十二分的精神,分析问题,寻找问题的答案。最后,循循善诱的老师给出了自己的解决方案。学生可以相互对比,以便于发现自己在设计上还存在的问题。因此,本书不适合那些惫懒的读者,不适合那些喜欢被动接收知识输入,不善于思考,不善于总结的程序员。

真正让本书获得赞誉的还是本书给出的案例,不过,也很有可能因此收获负面的批评。本书的案例是一个虚拟的真实项目。Oozinoz公司纯属子虚乌有,完全是由作者杜撰出来的一家虚拟公司;但这个案例又如此的真实,既牵涉到复杂的领域逻辑,又面对客户提出的种种需求变化,与我们工作中需要开发的项目何其相似!可能面临的批评是,为了学习设计模式,可能读者还需要成为一名烟火专家。然而,我谨以最谦卑的态度恳求诸位,在满怀怨气、恶毒诅咒作者(也可能包括躺着中枪的译者)之前,先想想我们平时开发的软件,是否存在相似复杂度的领域需求呢?让我们再仔细想想,倘若作者给出一个纯粹编造出来的玩具项目,贴近生活,浅显易懂,学习起来势如破竹,一路通关,是否真的意味着你已经明白如何在真实项目中运用设计模式?窃以为,学习尤其是技术学习,并不都是舒舒服服寓教于乐,躺着,玩着以及笑着也能学好设计模式。你以为的懂,以为的悟,其实还是一种虚妄。你抓住的是水中央的月影,一旦遇到真实案例,就好似石头打破水面的宁静,一切都会破碎。

本书的原版事实上获得了业界的广泛赞誉,同时也是John Vlissides主编的“软件模式”丛书之一。John Vlissides就是著名的GOF其中之一位,可惜他已在多年前离开人世。本书作者是John Vlissides的生前好友,本书内容曾经得到过他的建议。从书的内容来看,部分Java案例显得有些过时;不过,就设计而言,拥有悠久的历史,有时候意味着它可能成为经典。不错,与经典的GOF《设计模式》相比,本书无疑要失色许多。GOF《设计模式》的光芒在于它的开创性。只要是讲解设计模式,没有哪一本书的光芒可以盖过GOF的著作。它就像是一颗恒星,其他有关设计模式的书籍,是围绕着它公转的一颗颗行星,都是借着恒星的光芒反射出属于自己的光亮。 然而,从光芒的热度与亮度来讲,也许行星才是当前的你最适合的。

阅读本书的读者,除了需要具备一些面向对象与设计模式的基础知识外,还需要有足够的耐心,并保存一份渴望与热情。耐心可以帮助你坚持细读与精读,持之以恒地深入理解本书的案例分析,努力面对作者给出的挑战。而这种耐心则需要提高技术能力的渴望,探求技术奥秘的热情来时刻保鲜。

本书的翻译由我的同事史磊与我共同完成,并最后由我完成审校工作。在翻译本书时,我还参考了由龚波、赵彩琳、陈蓓翻译的前一个版本,在此向他(她)们表示衷心地感谢。因为工作繁忙的缘故,本书的翻译工作一直断断续续持续了近一年的时间,如今交稿,既有卸下重任的轻松畅快,却又因为自己的惫懒使得翻译工作进展缓慢而深感愧疚。这里需要感谢本书编辑符隆美女士给予我的耐心与支持。

在写作这篇译者序时,同事史磊已经远赴ThoughtWorks南非工作,而我则从北京回到了ThoughtWorks成都。非常怀念我们在北京Office一起工作的日子。我们曾经在同一个项目结对编程,本书的翻译也可以说是结对完成,算是一次愉快的翻译体验。鉴于本人能力水平有限,翻译或有疏漏或错误,还请读者不吝赐教,并通过我的博客与我联系。

Comments