基本信息
- 原书名:Holub on Patterns: Learning Design Patterns by Looking at Code
- 原出版社: Apress
- 作者: (美)Allen Holub
- 译者: 徐迎晓 等
- 出版社:机械工业出版社
- ISBN:9787111197997
- 上架时间:2006-10-16
- 出版日期:2006 年9月
- 开本:16开
- 页码:380
- 版次:1-1
- 所属分类:计算机 > 软件工程及软件方法学 > 设计模式

编辑推荐
要成为一名优秀的面向对象设计人员,必须清楚地了解设计模式,不仅要知道它们是什么,还要知道如何利用它们解决实际问题。可惜这方面的书大部分仅给出脱离现实的、简单的例子,当中还充斥着不切实际的、教条的语汇,把这一课题复杂化了。
为了解决这些问题,作者写了这本书供程序员阅读,并围绕两个较为复杂的例子展开讨论。书中把“四人组”所有的设计模式都用实际程序展现出来,更形象地说明了这些模式的工作原理和相互关系,以及在实际复杂应用中的使用。本书也谈到了面向对象程序设计的原则,以及如何在模式中应用这些原则,这样一来你就明白了模式是如何起作用的。本书还包含了“设计模式速查参考”,方便你在学习过程中随时查阅。
内容简介
计算机书籍
本书系统介绍如何使用模式来解决面向对象编程的常见问题。主要内容包括:面向对象与设计模式初步,使用接口创建型模式编程,涉及对基类问题的分析,对extends缺点的分析,对get/set方法的剖析等。本书通过两个完整的程序,反映了实际编程中模式应用的技巧,对掌握设计模式很有启发性。.
本书适合软件开发技术人员阅读,也可作为高等院校计算机专业相关课程的教学参考书。
要成为一名优秀的面向对象设计人员,必须清楚地了解设计模式,不仅要知道它们是什么,还要知道如何利用它们解决实际问题。可惜这方面的书大部分仅给出脱离现实的、简单的例子,当中还充斥着不切实际的、教条的语汇,把这一课题复杂化了。..
为了解决这些问题,作者写了这本书供程序员阅读,并围绕两个较为复杂的例子展开讨论书中把“四人组”所有的设计模式都用实际程序展现出来,更形象地说明了这些模式的工作原理和相互关系,以及在实际复杂应用中的使用。本书也谈到了面向对象程序设计的原则,以及如何在模式中应用这些原则,这样一来你就明白了模式是如何起作用的。本书还包含了“设计模式速查参考”,方便你在学习过程中随时查阅。
阅读本书之前不需要了解设计模式(不过Java要懂一点),但读完本书后,你就能完全体会这些模式的使用方法,并能够在工作中轻松地使用它们。...
作译者
徐迎晓,博士。现为复旦大学教师,硕士生导师,在软件学院讲授多门面向对象技术相关课程。1989~1996年就读于东南大学机械工程系,获工学学士、硕士学位。1999~2002年就读于复旦大学计算机系,获理学博士学位。曾获江苏省科技进步四等奖、被评为上海市优秀青年教师等。曾任教上海大学,多年从事网络设计与管理、软件开发、Novell及SUN Java认证培训等。编著《Java语法及网络应用设计》、《Java安全性编程实例》等多本书籍。...
目录
前言
关于作者
第1章 面向对象与设计模式初步
1.1 模式和惯用法
1.2 究竟什么是设计模式
1.3 模式究竟有什么用途
1.4 模式在设计中所充当的角色
1.5 模式的分类
1.5.1 有关设计的一般性讨论
1.5.2 使用Java按照FORTRAN方式来编程
1.5.3 睁大眼睛来编程
1.6 对象
1.6.1 胡言乱语
1.6.2 对象是一组能力
1.6.3 事情是如何做错的
1.6.4 如何将事情做“对”
1.7 细胞自动机
1.8 getter和setter方法是有害的
1.8.1 描绘你自己
译者序
本书前两章的内容不仅和模式有关,也对面向对象技术作了不少讨论。书中的很多观点为我们打开了另一扇窗户,让我们关注到平时不大注意的问题。比如对脆弱的基类问题以及extends的缺点的大量令析、对get/set方法的批判、对模板方法模式所存在的问题的分析等。在作者的网站中有个幻灯片,标题是“你所知道的一切都是错误的!”(Everything You Know is Wrong!),该标题作为本书特点的写照颇为合适。
在对模式的讲解中,本书让我印象最深的地方有两点:一是模式的代码实现与众不同;二是全书通过两个完整的例子来讲解模式。
很多设计模式书籍中的代码实现都大同小异,而本书中的代码实现则大量使用了匿名内部类,给人耳目一新的感觉,很有启发性。通过案例讲解模式在很多设计模式书籍中已非鲜见,但本书中的案例还是非常独特。第一个案例“生命游戏”非常有趣,尽管作者为了讲解模式强行塞进去很多模式,但其中的模式应用还是能给我们不少启发。第二个案例“嵌入式SQL”是产品级代码,更具挑战性,书中对其体系结构以及模式应用作了详细的分析。尤其有特色的是,两个案例中的模式应用都不像其他的设计模式书籍中的案例那样理想化,而是将各种模式以错综复杂的关系交织在一起,经常是一个类参与多个模式,这真实反映了现实世界中模式应用的情况。为了表现这种错综复杂的关系,两个案例都使用了模式图以及UML类图,尤其是模式图起到了很好的效果。..
只要学习过一种面向对象编程语言,各种层次的读者都可以从本书中汲取到有用的内容。随着翻译的进展,我在讲授各个层次的面向对象技术相关课程时,穿插了本书中的绝大部分内容。如果读者以前从来没有接触过面向对象分析与设计,阅读本书会有一点难度,可先涉猎一些面向对象分析与设计的初步知识;如果以前从来没有接触过设计模式,本书的很多内容还是偏难些,应该在阅读到相关模式时针对相应的模式先参考一下网上或者其他书籍中一些基础的内容。
翻译是一项费时费力的浩大工程,尽管我们在翻译过程中尽力做到完美,但每一遍的校译都会发现一些新的值得改进之处。读者可以在译者的网站http://javabook.126.com中找到译者的联系方式并进行意见反馈。
本书翻译过程中,周逸勋、李波、谢维分别翻译了第3、4章和附录,徐迎晓翻译其他内容并负责全面的校译与润色,刘防参与了各章的校译以及疑难翻译的讨论。...
徐迎晓
2006年8月于复旦大学
前言
本书最基本的观点是:学习和理解设计模式的最佳方法是在实际代码中观察它们,这时你会发现各种模式混杂在一起,现实世界中的模式就是如此。
因此,本书通过查看计算机程序的方式将设计模式呈现给你。我的意图是使得Gamma、Helm、Johnson和Vlissides的开创性著作《设计模式:可复用面向对象软件的基础》(Addison Wesley,1995年,中文版已由机械工业出版社出版)更加清晰和易于理解。(这四个人经常被称为“四人帮”或“四人组”(GoF),他们的书也通常被称为“四人组”的书。)本书将“四人组”的书放在具体环境中讲解,按照设计模式在现实世界中的实际使用方式来演示和讲解设计模式。当你看完本书后,将接触到所有的“四人组”设计模式,而且是在真正的计算机程序环境中接触的。
不要误解,本书不是要取代“四人组”的书,而是作为其补充。Gamma、Helm、Johnson和Vlissides的工作为面向对象设计作出了巨大贡献,没有他们的工作,本书当然也不会存在。不过“四人组”的书对于许多程序员来说太深奥且晦涩难懂,因此本书有其存在的必要。
本书和其他设计模式的书相比是不合常规的,是“由内而外”的。本书不是对设计模式进行编目并在编目的每一节给出脱离现实的、简单的例子,而是讨论了两个计算机程序,讨论时使用的术语是这两个程序所使用的模式。你将看到模式在实际的程序中是什么样子以及模式是如何以复杂的方式彼此交织在一起的。
设计模式编目方法(如设计模式原著的做法)将各个模式隔离了开来,不容易理解现实世界使用模式的方式。如果你以前已经使用过演示这些模式的代码的话,这种编目方法当然是很优秀的。但是如果你以前没有这类代码的编程经验,则这种编目方法会难以理解。同时,编目方法只能使你获得对设计模式知识性的理解,而几乎不能使你理解如何使用模式来编写实际的代码。
预备知识
本书假定你已经知道Java并至少使用Java编写过几个程序。特别是,我在书中大量地使用了匿名内部类,因此你必须熟练掌握该语法。同时你必须精通“核心”Java包(比如java.io)并具备用户界面体系(如Swing和AWT)的基本知识。这些在你学习语言的时候可能已经掌握了。
本书还假定你已经掌握了面向对象编程的基础:继承、接口和多态等。本书后面会讨论到诸如extends的缺点之类的东西,为了使讨论有意义,你必须知道extends是做什么的。我假定你已经知道了其优点,所以不会再烦述面向对象语言特征诸如继承有什么优点。我在讨论某个编程惯用法或者语言特征的负面因素时,请不要认为该编程惯用法或者语言特征没有值得肯定的一面。我假定你已经知道的东西就不需要在书中讲解了。
最后,我假定你对UML有初步的了解。UML(统一建模语言)是一种对设计的图形化表示法,可用于显示程序的静态(类)结构以及组成程序的对象在运行时是如何相互交互的。
如果在你继续阅读本书之前需要在技术上更上一层楼的话,下面的“参考资料”一节中列出的Web页面给出了这些主题的所有参考资料。如果你没有真正理解UML,或许还可以应付过去;但如果对Java不熟悉的话,阅读本书将很困难。
假设
本书假设你希望知道如何构建纯粹的面向对象解决方案,因此没有对基于该假定的每个陈述都加以特别说明。面向对象策略通常都包含基于过程的替代方案,但本书没有讨论这些替代方案。..
我之所以提起这些显而易见的东西,是为了防备一些不可避免的吹毛求疵者,他们会仅仅因为书中没有对每个问题都讨论所有的方案(包括忠实基于过程的方案)而抱怨说整本书都是错误的。
本书有些话题会引发争议,包括对实现的封装(即指应该尽力避免使用大多数常用的get/set函数)和过度使用实现继承(这将创建不必要的耦合关系)。
注意!注意!本书将特立独行
最后,我想强调一下我的行文风格。
到目前为止你应该能看出来,我有什么想法就会说出来,我通常不会通过辩解来证明我的观点,如果你不喜欢这样,那就买其他书吧。
每个人都有自己的观点,如果将这些观点隐藏在不偏不倚的虚饰之下,那么除了让人困惑外没有什么用处。你可以不同意我的观点,但请在你有了强有力的证据支持你的观点时再来和我争论。“没有人这样做”并不是强有力的证据,反之亦然:“每个人都这样做”也不是强有力的证据。
有时我被指责为太“独断”。如果你所说的“独断”是指我激烈地捍卫我的思想(那些在实际代码中效果很好的思想),并且反过来对实践中很糟糕地失败了的思想大加贬低的话,那么我想我确实是独断的。但我自认为我是现实的,而不是独断的。我顽固地遵循着面向对象的准则,因为每次当我背离了这些准则时,都必须重写代码。我只是没有时间把同一件事做两次而已。