首页>参考读物>计算机科学与技术>软件与程序设计

设计模式之禅
作者 : 秦小波 著
出版日期 : 2010-03-08
ISBN : 978-7-111-29544-0
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 561
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书写作方式新颖、语言精炼、行文幽默、阐述深刻、注重实战,注定会成为设计模式领域的里程碑之作。全书共分为五部分,第一部分全面讲述了面向对象程序设计的6大原则;第二部分深入浅出地阐述了23种设计模式,将这23种设计模式与我们耳熟能详的历史故事结合在了一起,趣味性极强;第三部分对各种彼此之间有关联的设计模式进行了分析和比较,不仅告诉读者何时应该使用何种设计模式,而且还告诉读者如何在实际开发中运用这些设计模式,这是全书的精华部分之一,是目前所有设计模式类书籍都不具备的;第四部分是全书内容的升华,讲解了设计模式的混编,深入地剖析了如何将各种设计模式结合起来使用,这也是同类书中未涉及的内容,能让读者的水平提升到一个更高的层次;第五部分是附录,对23种设计模式的定义进行了摘录和翻译,原汁原味,同时还提供了一份设计模式彩图手册,读者可以拆下来,随身携带,便于参考。

图书前言

终于可以写前言了,这说明本书已经基本完成,可以长嘘一口气了。
为什么写这本书
  今年5月份,我在JavaEye上发了一个帖子,其中提到自己已经工作9年了,总觉得这9年不应该就这么荒废了,应该给自己这9年的工作写一个总结,总结的初稿就是这本书。
  在谈为什么写这本书之前,先抖抖自己这9年的职业生涯吧。大学时我是学习机械的,当时计算机刚刚热起来,自己也喜欢玩一些新奇的东西,记得最清楚的是用VB写了一个自由落体的小程序,模拟小球从桌面掉到地板上,然后计算反弹趋势,很有成就感。于是2000年毕业时,我削尖了脑袋进入了IT行业,成为了一名真正的IT男,干着起得比鸡早、睡得比鸡晚的程序员工作,IT男的辛酸有谁知晓!
  坦白地说,我的性格比较沉闷,属于典型的程序员型闷骚,比较适合做技术研究。在这9年里,项目管理做过,系统分析做过,小兵当过,团队领导人也当过,但至今还是一个做技术的。要总结这9年技术生涯,总得写点什么吧,最好是还能对其他人有点儿用的。那写什么好呢?Spring、Struts等工具框架类的书太多太多,很难再写出花样来,经过一番思考,最后选择了一个每一位技术人员都需要掌握的、但普及程度还不是非常高的、又稍微有点难度的主题—设计模式(Design Pattern,DP)。
  中国人有不破不立的思维,远的如秦始皇焚书坑儒、项羽火烧阿房宫,近的如破“四旧”。正是由于有了这样的思想,于是乎能改的就改,不能改的就推翻重写,没有一个持续开发蓝图。为什么要破才能立呢?为什么不能持续地发展?你说这是谁的错呢?是你架构师的错,你不能持续地拥抱变化,这是一个系统最失败的地方。那怎么才能实现拥抱变化的理想呢?设计模式!
  设计模式是什么?它是一套理论,由软件界的先辈们(The Gang of Four:包括Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)总结出的一套可以反复使用的经验,它可以提高代码的可重用性,增强系统的可维护性,以及解决一系列的复杂问题。做软件的人都知道需求是最难把握的,我们可以分析现有的需求,预测可能发生的变更,但是我们不能控制需求的变更。问题来了,既然需求的变更是不可控的,那如何拥抱变化呢?幸运的是,设计模式给了我们指导,专家们首先提出了6大设计原则,但这6大设计原则仅仅是一系列“口号”,真正付诸实施还需要有详尽的指导方法,于是23种设计模式出现了。
  设计模式已经诞生15年了,在这15年里出版了很多关于它的经典著作,相信大家都能如数家珍。尽管有这么多书,工作5年了还不知道什么是策略模式、状态模式、责任链模式的程序员大有人在。不信?你找个机会去“虚心”地请教一下你的同事,看看他对设计模式有多少了解。不要告诉我要翻书才明白!设计模式不是工具,它是软件开发的哲学,它能指导你如何去设计一个优秀的架构、编写一段健壮的代码、解决一个复杂的需求。
  因为它是软件行业的经验总结,因此它具有更广泛的适应性,不管你使用什么编程语言,不管你遇到什么业务类型,设计模式都可以自由地“侵入”。
  因为它不是工具,所以它没有一个可以具体测量的标尺,完全以你自己的理解为准,你认为自己多了解它,你就有可能产生多少的优秀代码和设计。
  因为它是指导思想,你可以在此基础上自由发挥,甚至是自己设计出一套设计模式。
  世界上最难的事有两件:一是让人心甘情愿地把钱掏出来给你,二是把自己的思想灌输到别人的脑子里。设计模式就属于第二种,它不是一种具体的技术,不像Struts、Spring、Hibernate等框架。一个工具用久了可以熟能生巧,就像砌墙的工人一样,长年累月地砌墙,他也知道如何把墙砌整齐,如何多快好省地干活,这是一个人的本能。我们把Struts用得很溜,把Spring用得很顺手,这非常好,但这只是一个合格的程序员应该具备的基本能力!于是我们被冠以代码工人(Code Worker)—软件行业的体力劳动者。
  如果你通晓了这23种设计模式就不同了,你可以站在一个更高的层次去赏析程序代码、软件设计、架构,完成从代码工人到架构师的蜕变。注意,我说的是“通晓”,别告诉我你把23种设计模式的含义、适应性、优缺点都搞清楚了就是通晓。错了!没有工作经验的积累是不可能真正理解设计模式的,这就像大家小时候一直不明白为什么爸爸妈妈要工作而不能每天陪自己玩一样。
  据说有的大学已经开了设计模式这门课,如果仅仅是几堂课,让学生对设计模式有一个初步的了解,我觉得并无不妥,但如果是专门的一门课程,我建议取消它!因为对一个尚无项目开发经验的学生来说,理解设计模式不是一般困难,而是非常非常困难!之前没有任何的实战经验,之后也没有可以立即付诸实践的场景,这样能理解设计模式吗?
  在编写本书之前,23种设计模式我都用过,而且还算比较熟练,但是当真正要写到书中时,感觉心里没谱儿了。这个定义是这样的吗?是需要用抽象类还是应该用接口?为什么在这里不能抽取抽象呢?为什么在实际项目中这个模式要如此蜕化?这类小问题有时候很纠结,需要花费大量的精力和时间去分析和确认。所以,在写作的过程中我有过很多忧虑,担心书中会有太多瑕疵,这种忧虑现在仍然存在。遇到挫折的时候也气馁过,但是我坚信一句话:“开弓没有回头箭,回头即是空”,既然已经开始,就一定要圆满完成。
本书的特色
  简单、通俗、易懂,但又不肤浅,这是本书的最大特色。自己看过的技术书还算比较多,很痛恨那种大块头的巨著,搁家里当枕头都觉得太硬。如果要是再晦涩难懂点,那根本没法看,看起来实在是太累。设计模式原本就是理论性的知识,讲解的难度比较大,但我相信这本书能够把你对设计模式的恐惧一扫而光。不信?挑几页先看看!
  我的理念是:像看小说一样阅读本书。我尽量用浅显通俗的语言讲解,尽量让你有继续看下去的欲望,尽量努力让你有兴趣进入设计模式的世界,兴趣是第一老师嘛!虽然我尽量让这本书浅显、通俗、易懂,但并不代表我的讲解就很肤浅。每个设计模式讲解完毕之后,我都附加了两个非常精华的部分:设计模式扩展和最佳实践,这是俺压箱底的技能了,为了博君一看,没招了,抖出来吧!尤为值得一提的是,本书还有设计模式PK和混编设计模式两部分内容教你如何自如地去运用这些设计模式,这是当前所有设计模式类的图书都不具备的,连最权威的那本书也不例外。
  我很讨厌技术文章中夹杂着的那些晦涩难懂的文字,特别是一堆又一堆的名词堆砌,让人看着就反胃。但是为了学习技术,为了生存,还是必须看下去。国内的技术文档,基本上都是板着一副冷面孔讲技术,为什么要把技术弄得这么生硬呢?技术也有它幽默、柔情的一面,只是被我们的“孔夫子们”掩盖了,能用萝卜、白菜这种寻常人都熟悉的知识来讲解原子弹理论的人,那是牛人,我佩服这样的人。记住,用一堆名词把你忽悠晕的人很可能什么都不懂!
  本书想告诉你的是,技术也可以很有乐趣,也可以让你不用皱着眉头思考,等待你的只是静静地看,慢慢地思考,本书的内容会润物细无声地融入你的思维中。
本书面向的读者
  热爱技术并且讨厌枯燥乏味技术文章的读者都可以看本书;
  你是程序员,没问题,本书能够让你写出更加高效、优雅的代码;
  你是架构师,那更好,设计模式可让你设计出健壮、稳定、高效的系统,并且自动地预防未来业务变化可能对系统带来的影响;
  你是项目经理,也OK,设计模式可以让你的工期大大缩短,让你的项目团队成员快速地理解你的意图,最终的成果就是优质的项目:高可靠性、高稳定性、高效率和低维护成本。
如何阅读本书
  首先声明,本书中所有的例子都是用Java语言来实现的,但是你可以随手翻翻看,基本上能保证每三条语句一个注释,可以说是在用咱们的母语讲解设计模式。即使你不懂Java语言,也没有关系,只要知道在Java中双斜杠(//)代表注释就足够了,况且Java如此强大和盛行,多了解一点没有坏处。类图看不懂?没关系,不影响你理解设计模式,多看看就懂了!
  如果你还没有编程经验,我建议你把它当作小说来看,懂行的看门道,不懂行的看热闹,这里的热闹足够多,够你看一壶的了。你现在能看懂多少是多少,不懂没有关系,你要知道,经验不是像长青春痘一样,说长就长出来了,它是需要时间积累的,需要你用心去感受,然后才能明白为什么要如此设计。
  如果你已经对编程有感觉了(至少2年开发经验),我相信你都能看懂,但能“懂”到什么程度,就很难说了,看你的水平了。但是,我可以保证,这里的设计模式都是你能看懂的,没有你看不懂的!我建议你通读这本书,然后挑门你最得意的编程语言,动手写吧!给自己制定一个计划,每天编写一段代码,不需要太多,200行足够,时不时地把设计模式融入到你的代码中。甭管是什么代码,比如你想编写一个识别美女图片的程序,好呀,抓紧时间去写吧,写好了就不用到处看美女了,程序一跑就把网上的美女图片都抓过来了,牛呀(记住,程序写好了要分享给我)。看吧,坚持下去,一年以后你再跟你的同侪比较一下,那差距肯定不是一般的大。
  如果你是资深工程师、架构师、技术顾问等高等级的技术人员,那我告诉你,你找对这本书了。系统架构没有思路?没有问题,看看扩展部分,它会开阔你的思路。系统的维护成本居高不下?看看本书,设计模式也许能帮你省点银子。开发资源无法保证?设计模式能让你用有限的资源(软硬件资源和人力资源)设计出一个优秀的系统。项目质量参差不齐,缺陷一大堆?多用设计模式,它会给你意想不到的效果。给人讲课没有素材?没问题,本书中的素材足以让你赢得阵阵掌声!
  编程是一门艺术活,我有一个同事,能把类图画成一个小乌龟的形状,天才呀!作为一位技术人员,最基本的品质就是诚实,“知之为知之,不知为不知,是知也”,自己不懂没有关系,去学,学无止境,但是千万不要贪多,这抓一点,那挖一点,好像什么都懂,其实什么都不懂。中国一直推崇复合型人才,我不是很赞成,因为这对年轻人来说是一个误导。先精一项技术,然后再发散学习,先点后面才是正道。
记得《武林外传》中有这样一段对话:
  刑捕头:手中无刀,心中有刀。
  老白:错了,最高境界是手中无刀,心中也无刀。
  体验一下吧,我们的设计模式就是一把刀,极致的境界就是心中无设计模式,代码亦无设计模式—设计模式随处可见,俯拾皆是,已经融入软件设计的灵魂中,这才是高手中的高手,简称高高手。
  哦,最最重要的忘记说了,请把附录中的“23种设计模式附图”撕下来,贴在你的办公桌前,时不时地看看,也让老板看看,咱是多么地用心!
关于书名
  乍一看,书名和内容貌似不相符呀,其实不然!
  在我们的常规思维中,“禅”应该是很高深的东西,只可意会,不可言传。没错,禅宗也是如此说。禅是得道者的“悟”,是不能用言语来表达的,但是得道者为了能让更多的人“悟”,就必须用最容易让人理解的文字把自己的体会表达出来。本书的“禅”是作者对设计模式的“悟”,本书的“形”就是你现在看到的这些极其简单、通俗、易懂的文字。
  至此,大家应该不会再对书名有疑虑了吧,嘿嘿。
致谢
  本书的写作耗时7个月,可以说是榨干了海绵里所有的水—基本上能用的时间都用上了。在公交车上打腹稿,干过!在马桶上查资料,干过!在睡梦中思考案例,也有过!就差没有走火入魔了!
  首先,感谢杨福川编辑,没有他的慧眼,这本书不可能出版。其次,感谢妻子和儿子,每天下班回到家,一按门铃,儿子就在里面叫:“我来开门,我来开门。”儿子三岁,太调皮了,他不睡觉我基本上是不能开写的,我一旦开始写东西,他就跑过来问:“爸爸,你在干什么呀”,紧接着下一句就是“爸爸,你陪我玩”,基本都是拿我当玩具,别的小朋友都是把父亲当马骑,他却不,他把我当摩托车骑,还要加油门,发动……小家伙脚太重了,再骑摩托,非被他踩死不可!
  再次,还要感谢《Spring技术内幕—深入解析Spring架构与设计原理》的作者计文柯先生、《冒号课堂:编程范式与OOP思想》的作者郑晖先生、《Spring揭秘》的作者王福强先生、《GWT揭秘》的作者徐彬先生,他们专业、细致、耐心的审核使得本书更加完美,特别是郑晖先生,虽言语不多,但言必中的,受益匪浅。非常幸运能获得他们四位的指导!
  最后要感谢我的朋友王骢,周末只要小家伙在家,我只有找地方写书的份儿,王骢非常爽快地把钥匙给我,让我有一个安静的地方写书。一个人沉浸在自己喜欢的世界里也是一件非常幸福的事。
  当然,还要感谢JavaEye上所有顶帖的网友,没有你们的支持我就失去了写作的动力,就像希腊神话中的巨人安泰失去了大地的力量一样,是你们的回帖让我觉得不孤单,让我知道我不是一个人在战斗!
  最后,再次对本书中可能出现的错误表示歉意,真诚地接受大家轰炸!如果你在阅读本书时发现错误或有问题想讨论,请发邮件给我。
  我的邮箱:cbf4life@126.com。

上架指导

计算机\程序设计

封底文字

二、封底设计要求及文字
禅宗曰:“教外别传,不立文字”,禅的境界本不该用文字来描述,言语也道不明白,但为了传道,悟道者仍要藉言语来说明。
何为禅?一种境界,一种体验,一种精神领域的最高修为。何为设计模式?对面向对象思想的深刻理解,对软件设计方法和编码经验的完美总结。
本书是创造者的心路历程,是实践者的智慧结晶,是得道者的禅悟。它通过幽默风趣的故事和通俗易懂的讲述方式,引导你悟透设计模式的真谛。
如果你在思考下面这些问题,也许本书就是你想要的!
1. 业务分析如此细致,架构设计如此健壮、可靠和稳定,但为何仍然无法适应业务发展的需要,而且生命周期只有短短几年?
2. 为何你的团队协作了多年却始终无法沉淀出可复用的组件或构件?依赖和解耦的标准是什么?如何才能做到既不相互“刺伤”,又能相互“温暖”?
3. 架构设计时,如何才能实现高可扩展性和易维护性?如何避免维护成本大于开发成本的悲哀现状?
4. 交易型的系统如何大规模地借用设计模式的思想,以实现高性能、高可靠性的建设目标?
5. 架构设计时,如果遇到这样的情况:“有一个请求者和多个处理者,同时要求二者之间解耦,以便处理者可以动态地扩展”,这该如何处理?
6. 如果遇到过这样场景:“多个对象依赖一个对象,该对象状态改变时所有的依赖者都要相应地获得通知,并且要求对象间松散耦合”,这该如何处理?
7. 万物皆对象,不可能把每一个对象都分解到原子级别,如何适度地细化对象的颗粒度?怎样界定对象的粒度大小?
8. 同为创建类模式,工厂方法模式和建造者模式都可以创建对象,它们之间有何区别?适用的场景又有何不同?
9. 状态模式和策略模式的通用类图如此相似,在实际的应用场景中如何区分它们?
10. 如何使命令模式和责任链模式完美搭配并建立一个高可扩展性的系统架构,以解决客户端和处理者都参数化的场景?
11. 观察者模式和责任链模式真的没有可比性吗?它们的主要区别何在?实际应用中如何使用?
12. 组合模式只能用来表示部分和整体的关系吗?其扩展出的规格模式是如何实现的?透明的组合模式和安全的组合模式有何区别?

作者简介

秦小波 著:暂无简介

图书目录

前 言
第一部分  大旗不挥,谁敢冲
锋—6大设计原则全新解读
第1章  单一职责原则 2
1.1  我是“牛”类,我可以担任多职吗 2
1.2  绝杀技,打破你的传统思维 3
1.3  我单纯,所以我快乐 6
1.4  最佳实践 7
第2章  里氏替换原则 8
2.1  爱恨纠葛的父子关系 8
2.2  纠纷不断,规则压制 9
2.3  最佳实践 18
第3章  依赖倒置原则 19
3.1  依赖倒置原则的定义 19
3.2  言而无信,你太需要契约 20
3.3  依赖的三种写法 25
3.4  最佳实践 26
第4章  接口隔离原则 28
4.1  接口隔离原则的定义 28
4.2  美女何其多,观点各不同 29
4.3  保证接口的纯洁性 33
4.4  最佳实践 35
第5章  迪米特法则 36
5.1  迪米特法则的定义 36
5.2  我的知识你知道得越少越好 36
5.3  最佳实践 43
第6章  开闭原则 44
6.1  开闭原则的定义 44
6.2  开闭原则的庐山真面目 44
6.3  为什么要采用开闭原则 49
6.4  如何使用开闭原则 51
6.5  最佳实践 55
第二部分  真刀实枪—23种
设计模式完美演绎
第7章  单例模式 58
7.1  我是皇帝我独苗 58
7.2  单例模式的定义 59
7.3  单例模式的应用 60
7.3.1  单例模式的优点 60
7.3.2  单例模式的缺点 60
7.3.3  单例模式的使用场景 61
7.3.4  单例模式的注意事项 61
7.4  单例模式的扩展 62
7.5  最佳实践 64
第8章  工厂方法模式 65
8.1  女娲造人的故事 65
8.2  工厂方法模式的定义 69
8.3  工厂方法模式的应用 70
8.3.1  工厂方法模式的优点 70
8.3.2  工厂方法模式的使用场景 71
8.4  工厂方法模式的扩展 71
8.5  最佳实践 77
第9章  抽象工厂模式 78
9.1  女娲的失误 78
9.2  抽象工厂模式的定义 83
9.3  抽象工厂模式的应用 86
9.3.1  抽象工厂模式的优点 86
9.3.2  抽象工厂模式的缺点 86
9.3.3  抽象工厂模式的使用场景 86
9.3.4  抽象工厂模式的注意事项 86
9.4  最佳实践 87
第10章  模板方法模式 88
10.1  辉煌工程—制造悍马 88
10.2  模板方法模式的定义 93
10.3  模板方法模式的应用 94
10.3.1  模板方法模式的优点 94
10.3.2  模板方法模式的缺点 95
10.3.3  模板方法模式的使用场景 95
10.4  模板方法模式的扩展 95
10.5  最佳实践 99
第11章  建造者模式 100
11.1  变化是永恒的 100
11.2  建造者模式的定义 109
11.3  建造者模式的应用 111
11.3.1  建造者模式的优点 111
11.3.2  建造者模式的使用场景 111
11.3.3  建造者模式的注意事项 111
11.4  建造者模式的扩展 111
11.5  最佳实践 112
第12章  代理模式 113
12.1  我是游戏至尊 113
12.2  代理模式的定义 116
12.3  代理模式的使用场景 118
12.3.1  代理模式的优点 118
12.3.2  代理模式的使用场景 119
12.4  代理模式的扩展 119
12.4.1  普通代理 119
12.4.2  强制代理 121
12.4.3  代理是有个性的 126
12.4.4  虚拟代理 128
12.4.5  动态代理 128
12.5  最佳实践 134
第13章  原型模式 135
13.1  个性化电子账单 135
13.2  原型模式的定义 141
13.3  原型模式的应用 142
13.3.1  原型模式的优点 142
13.3.2  原型模式的使用场景 142
13.4  原型模式的注意事项 143
13.4.1  构造函数不会被执行 143
13.4.2  浅拷贝和深拷贝 144
13.4.3  clone与final两个冤家 146
13.5  最佳实践 146
第14章  中介者模式 147
14.1  进销存管理是这个样子的吗 147
14.2  中介者模式的定义 156
14.3  中介者模式的应用 159
14.3.1  中介者模式的优点 159
14.3.2  中介者模式的缺点 159
14.3.3  中介者模式的使用场景 159
14.4  中介者模式的实际应用 160
14.5  最佳实践 161
第15章  命令模式 162
15.1  项目经理也难当 162
15.2  命令模式的定义 170
15.3  命令模式的应用 173
15.3.1  命令模式的优点 173
15.3.2  命令模式的缺点 173
15.3.3  命令模式的使用场景 173
15.4  命令模式的扩展 173
15.4.1  未讲完的故事 173
15.4.2  反悔问题 174
15.5  最佳实践 175
第16章  责任链模式 178
16.1  古代妇女的枷锁—
“三从四德” 178
16.2  责任链模式的定义 186
16.3  责任链模式的应用 189
16.3.1  责任链模式的优点 189
16.3.2  责任链模式的缺点 190
16.3.3  责任链模式的注意事项 190
16.4  最佳实践 190
第17章  装饰模式 192
17.1  罪恶的成绩单 192
17.2  装饰模式的定义 198
17.3  装饰模式应用 201
17.3.1  装饰模式的优点 201
17.3.2  装饰模式的缺点 201
17.3.3  装饰模式的使用场景 201
17.4  最佳实践 201
第18章  策略模式 203
18.1  刘备江东娶妻,赵云他容易吗 203
18.2  策略模式的定义 206
18.3  策略模式的应用 208
18.3.1  策略模式的优点 208
18.3.2  策略模式的缺点 208
18.3.3  策略模式的使用场景 209
18.3.4  策略模式的注意事项 209
18.4  策略模式的扩展 209
18.5  最佳实践 214
第19章  适配器模式 215
19.1  业务发展—上帝才能控制 215
19.2  适配器模式的定义 221
19.3  适配器模式的应用 223
19.3.1  适配器模式的优点 223
19.3.2  适配器模式的使用场景 224
19.3.3  适配器模式的注意事项 224
19.4  适配器模式的扩展 224
19.5  最佳实践 229
第20章  迭代器模式 230
20.1  整理项目信息—苦差事 230
20.2  迭代器模式的定义 236
20.3  迭代器模式的应用 239
20.4  最佳实践 239
第21章  组合模式 240
21.1  公司的人事架构是这样的吗 240
21.2  组合模式的定义 253
21.3  组合模式的应用 255
21.3.1  组合模式的优点 255
21.3.2  组合模式的缺点 256
21.3.3  组合模式的使用场景 256
21.3.4  组合模式的注意事项 256
21.4  组合模式的扩展 256
21.4.1  真实的组合模式 256
21.4.2  透明的组合模式 257
21.4.3  组合模式的遍历 259
21.5  最佳实践 260
第22章  观察者模式 262
22.1  韩非子身边的卧底是谁派来的 262
22.2  观察者模式的定义 271
22.3  观察者模式的应用 273
22.3.1  观察者模式的优点 273
22.3.2  观察者模式的缺点 274
22.3.3  观察者模式的使用场景 274
22.3.4  观察者模式的注意事项 274
22.4  观察者模式的扩展 275
22.4.1  Java世界中的观察者模式 275
22.4.2  项目中真实的观察者模式 276
22.4.3  订阅发布模型 277
22.5  最佳实践 277
第23章  门面模式 278
23.1  我要投递信件 278
23.2  门面模式的定义 283
23.3  门面模式的应用 284
23.3.1  门面模式的优点 284
23.3.2  门面模式的缺点 285
23.3.3  门面模式的使用场景 285
23.4  门面模式的注意事项 285
23.4.1  一个子系统可以有多个
门面 285
23.4.2  门面不参与子系统内的
业务逻辑 286
23.5  最佳实践 288
第24章  备忘录模式 289
24.1  如此追女孩子,你还不乐 289
24.2  备忘录模式的定义 294
24.3  备忘录模式的应用 297
24.3.1  备忘录模式的使用场景 297
24.3.2  备忘录模式的注意事项 297
24.4  备忘录模式的扩展 297
24.4.1  clone方式的备忘录 297
24.4.2  多状态的备忘录模式 300
24.4.3  多备份的备忘录 304
24.4.4  封装得更好一点 305
24.5  最佳实践 307
第25章  访问者模式 308
25.1  员工的隐私何在 308
25.2  访问者模式的定义 316
25.3  访问者模式的应用 320
25.3.1  访问者模式的优点 320
25.3.2  访问者模式的缺点 320
25.3.3  访问者模式的使用场景 320
25.4  访问者模式的扩展 321
25.4.1  统计功能 321
25.4.2  多个访问者 323
25.4.3  双分派 326
25.5  最佳实践 328
第26章  状态模式 329
26.1  城市的纵向发展功臣—电梯 329
26.2  状态模式的定义 341
26.3  状态模式的应用 343
26.3.1  状态模式的优点 343
26.3.2  状态模式的缺点 344
26.3.3  状态模式的使用场景 344
26.3.4  状态模式的注意事项 344
26.4  最佳实践 344
第27章  解释器模式 346
27.1  四则运算你会吗 346
27.2  解释器模式的定义 352
27.3  解释器模式的应用 354
27.3.1  解释器模式的优点 354
27.3.2  解释器模式的缺点 354
27.3.3  解释器模式使用的场景 355
27.3.4  解释器模式的注意事项 355
27.4  最佳实践 355
第28章  享元模式 356
28.1  内存溢出,司空见惯 356
28.2  享元模式的定义 361
28.3  享元模式的应用 364
28.3.1  享元模式的优点和缺点 364
28.3.2  享元模式的使用场景 364
28.4  享元模式的扩展 365
28.4.1  线程安全的问题 365
28.4.2  性能平衡 366
28.5  最佳实践 369
第29章  桥梁模式 371
29.1  我有一个梦想…… 371
29.2  桥梁模式的定义 379
29.3  桥梁模式的应用 381
29.3.1  桥梁模式的优点 381
29.3.2  桥梁模式的使用场景 382
29.3.3  桥梁模式的注意事项 382
29.4  最佳实践 382
第三部分  谁的地盘谁做主—设计模式PK
第30章  创建类模式大PK 384
30.1  工厂方法模式VS建造者模式 384
30.1.1  按工厂方法建造超人 384
30.1.2  按建造者模式建造超人 386
30.1.3  最佳实践 389
30.2  抽象工厂模式VS建造者模式 390
30.2.1  按抽象工厂模式生产车辆 390
30.2.2  按建造者模式生产车辆 394
30.2.3  最佳实践 399
第31章  结构类模式大PK 400
31.1  代理模式VS装饰模式 400
31.1.1  代理模式 400
31.1.2  装饰模式 402
31.1.3  最佳实践 403
31.2  装饰模式VS适配器模式 404
31.2.1  用装饰模式描述丑小鸭 404
31.2.2  用适配器模式实现丑小鸭 407
31.2.3  最佳实践 410
第32章  行为类模式大PK 411
32.1  命令模式VS策略模式 411
32.1.1  策略模式实现压缩算法 411
32.1.2  命令模式实现压缩算法 414
32.1.3  小结 419
32.2  策略模式VS状态模式 420
32.2.1  策略模式实现人生 420
32.2.2  状态模式实现人生 423
32.2.3  小结 425
32.3  观察者模式VS责任链模式 426
32.3.1  责任链模式实现DNS
解析过程 427
32.3.2  触发链模式实现DNS
解析过程 432
32.3.3  小结 437
第33章  跨战区PK 438
33.1  策略模式VS桥梁模式 438
33.1.1  策略模式实现邮件发送 439
33.1.2  桥梁模式实现邮件发送 442
33.1.3  最佳实践 445
33.2  门面模式VS中介者模式 446
33.2.1  中介者模式实现工资计算 446
33.2.2  门面模式实现工资计算 451
33.2.3  最佳实践 454
33.3  包装模式群PK 455
33.3.1  代理模式 455
33.3.2  装饰模式 457
33.3.3  适配器模式 459
33.3.4  桥梁模式 461
33.3.5  最佳实践 464
第四部分  完美世界—
设计模式混编
第34章  命令模式+责任链模式 466
34.1  搬移UNIX的命令 466
34.2  混编小结 481
第35章  工厂方法模式+策略模式 483
35.1  迷你版的交易系统 483
35.2  混编小结 493
第36章  观察者模式+中介者模式 495
36.1  事件触发器的开发 495
36.2  混编小结 508
第37章  规格模式 509
37.1  规格模式的实现 509
37.2  最佳实践 521
第38章  MVC框架 526
38.1  MVC框架的实现 526
38.1.1  MVC的系统架构 528
38.1.2  模型管理器 534
38.1.3  值栈 538
38.1.4  视图管理器 538
38.1.5  工具类 542
38.2  最佳实践 544
附录:23种设计模式彩图

教学资源推荐
作者: 王恺 王志 李涛 朱洪文 编著
作者: Behrouz A. Forouzan;Richard F. Gilberg
作者: 许畅 陈嘉 朱晓瑞 编著
作者: 辛运帏 高宁 徐文拴 等编著
参考读物推荐
作者: Deepak Alur, John Crupi, Dan Malks
作者: [美] 弗拉德·里斯库迪亚(Vlad Riscutia) 著
作者: 董天一 戴嘉乐 黄禹铭 著