内容简介
本书通篇都是以情景对话的形式,用多个小故事或编程示例来组织讲解GoF(设计模式的经典名著——Design Patterns:Elements of Reusable Object-Oriented Software,中译本名为《设计模式——可复用面向对象软件的基础》的四位作者Erich Gamma、Richard Helm、Ralph Johnson,以及John Vlissides,这四人常被称为Gang of Four,即四人组,简称GoF)总结的23个设计模式。本书共分为29章。其中,第1、3、4、5章着重讲解了面向对象的意义、好处以及几个重要的设计原则;第2章,以及第6到第28章详细讲解了23个设计模式;第29章是对设计模式的全面总结。附录部分是通过一个例子的演变为初学者介绍了面向对象的基本概念。本书的特色是通过小菜与大鸟的趣味问答,在讲解程序的不断重构和演变过程中,把设计模式的学习门槛降低,让初学者可以更加容易地理解——为什么这样设计才是好的?是怎样想到这样设计的?以达到不但授之以“鱼”,还授之以“渔”的目的。引导读者体会设计演变过程中蕴藏的大智慧。
本书适合编程初学者或希望在面向对象编程上有所提高的开发人员阅读。
目录
第1章 代码无错就是优?--简单工厂模式
1.1 面试受挫
1.2 初学者代码毛病
1.3 代码规范
1.4 面向对象编程
1.5 活字印刷,面向对象
1.6 面向对象的好处
1.7 复制vs.复用
1.8 业务的封装
1.9 紧耦合vs.松耦合
1.10 简单工厂模式
1.11 UML类图
第2章 商场促销--策略模式
2.1 商场收银软件
2.2 增加打折
2.3 简单工厂实现
2.4 策略模式
2.5 策略模式实现
2.6 策略与简单工厂结合
2.7 策略模式解析
第3章 拍摄UFO--单一职责原则
3.1 新手机
3.2 拍摄
3.3 没用的东西
3.4 单一职责原则
3.5 方块游戏的设计
3.6 手机职责过多吗?
第4章 考研求职两不误--开放-封闭原则
4.1 考研失败
4.2 开放-封闭原则
4.3 何时应对变化
4.4 两手准备,并全力以赴
第5章 会修电脑不会修收音机?--依赖倒转原则
5.1 MM请求修电脑
5.2 电话遥控修电脑
5.3 依赖倒转原则
5.4 里氏代换原则
5.5 修收音机
第6章 穿什么有这么重要?--装饰模式
6.1 穿什么有这么重要?
6.2 小菜扮靓第一版
6.3 小菜扮靓第二版
6.4 装饰模式
6.5 小菜扮靓第三版
6.6 装饰模式总结
第7章 为别人做嫁衣--代理模式
7.1 为别人做嫁衣!
7.2 没有代理的代码
7.3 只有代理的代码
7.4 符合实际的代码
7.5 代理模式
7.6 代理模式应用
7.7 秀才让小六代其求婚
第8章 雷锋依然在人间--工厂方法模式
8.1 再现活雷锋
8.2 简单工厂模式实现
8.3 工厂方法模式实现
8.4 简单工厂vs.工厂方法
8.5 雷锋工厂
第9章 简历复印--原型模式
9.1 夸张的简历
9.2 简历代码初步实现
9.3 原型模式
9.4 简历的原型实现
9.5 浅复制与深复制
9.6 简历的深复制实现
9.7 复制简历vs.手写求职信
第10章 考题抄错会做也白搭--模板方法模式
10.1 选择题不会做,蒙呗!
10.2 重复=易错+难改
10.3 提炼代码
10.4 模板方法模式
10.5 模板方法模式特点
10.6 主观题,看你怎么蒙
第11章 无熟人难办事?--迪米特法则
11.1 第一天上班
11.2 无熟人难办事
11.3 迪米特法则
第12章 牛市股票还会亏钱?--外观模式
12.1 牛市股票还会亏钱?
12.2 股民炒股代码
12.3 投资基金代码
12.4 外观模式
12.5 何时使用外观模式
第13章 好菜每回味不同--建造者模式
13.1 炒面没放盐
13.2 建造小人一
13.3 建造小人二
13.4 建造者模式
13.5 建造者模式解析
13.6 建造者模式基本代码
第14章 老板回来,我不知道--观察者模式
14.1 老板回来?我不知道!
14.2 双向耦合的代码
14.3 解耦实践一
14.4 解耦实践二
14.5 观察者模式
14.6 观察者模式特点
14.7 观察者模式的不足
14.8 事件委托实现
14.9 事件委托说明
14.10 石守吉失手机后的委托
第15章 就不能不换DB吗?--抽象工厂模式
15.1 就不能不换DB吗?
15.2 最基本的数据访问程序
15.3 用了工厂方法模式的数据访问程序
15.4 用了抽象工厂模式的数据访问程序
15.5 抽象工厂模式
15.6 抽象工厂模式的优点与缺点
15.7 用简单工厂来改进抽象工厂
15.8 用反射+抽象工厂的数据访问程序
15.9 用反射+配置文件实现数据访问程序
15.10 无痴迷,不成功
第16章 无尽加班何时休--状态模式
16.1 加班,又是加班!
16.2 工作状态-函数版
16.3 工作状态-分类版
16.4 方法过长是坏味道
16.5 状态模式
16.6 状态模式好处与用处
16.7 工作状态-状态模式版
第17章 在NBA我需要翻译--适配器模式
17.1 在NBA我需要翻译!
17.2&nbs
前言/序言
本书是一本程序集?NO。
本书是一本故事集?NO。
本书是一本通过故事讲述程序如何设计的方法集。
本书是给连Hello World都没写过的非程序员看的书吗?NO。
本书是给玩过穿孔纸带(0/1)、写过汇编、BASIC、C、C++、Delphi、Java、C#等语言,开发过覆盖全球、使用人数过亿、数百万行代码等大型系统的骨灰级程序员看的书吗?NO。
本书希望能给渴望了解OO世界的初学者、困惑于僵硬、脆弱、无法复用的代码编程体验者、一直打着OO编程的旗号,做着过程式开发的基于对象的编程实践者一些好的建议和提示。
本书起因
写本书源于我一次做培训的经历,学生大多是计算机专业的学生或有过一定经验的在职开发者。他们都知道类、方法、构造方法、甚至抽象类、接口等概念,并用 Visual Studio写过不少的Windows或Web程序,可是当我提问为什么要用面向对象,它的好处在哪里时,却没有人能完整地讲得出来,多数人的反应是,概念知道的,就是表达不清楚。
针对于此,我就举了中国古代的四大发明中活字印刷的例子(见第1章),通过一个虚构的三国曹操做诗的情景,把面向对象的几大好处讲解了一下,学生普遍都感觉通俗易懂,觉得这样的教学比直接告诉面向对象有什么好处要更加容易理解和记忆。
这就使得我不断地思考这样一个问题,学一门技术是否需要趣味性、通俗性的引导。
我在思考中发现,看小说时,一般情况下我都可以完整地读完它,而阅读技术方面的图书,却很少有真正的每章每页的仔细阅读。尽管这两者是有很大区别,技术书中可能有不少知识是已经学会或暂时用不上的内容,但也不得不承认,小说之所以可以坚持读完是因为对它感兴趣,作者的文字吸引你。而有些技术书的枯燥乏味使得阅读产生了困难,通常读个前几章就留待以后再说了。
技术课的教学同样如此,除非学生是抱着极大的学习动机来参与其中,否则照本宣科的教学、枯燥乏味的讲解,学生一定会被庞杂的概念和复杂的逻辑搅晕了头脑,致使效果大打折扣。也正因为此,往往造成部分学生,学了四年的计算机编程,却可能连面向对象有什么好处都还说不清。
为什么不可以让技术书带点趣味性呢,哪怕这些趣味性与所讲的技术并不十分贴切,只要不是影响技术核心的本质,不产生重大的错误,让读者能轻松阅读它,并且有了一定的了解和感悟,这要比一本书写得高深无比,却被长期束之高阁要好得多。
也正是这个原因,本人开始了关于设计模式的趣味性写作的尝试。
本书读者
显然本书不是给无任何编程经验的人看的,对于想入这一行的朋友来说,找一门编程语言,从头开始或许才是正道。而本书也不太适合有了多年面向对象开发经验,对常用的设计模式了如指掌的人看的。毕竟这里更多的是一些基础性的东西。
我时常拿程序员的成长与足球运动员的成长做对比。
GoF 的《设计模式》好比是世界顶级足球射门集锦,《重构》、《敏捷软件开发》、《设计模式解析》好比是一场场最精彩的足球比赛。我为之疯狂,为之着迷。可是我并不只是想做一个球迷(软件使用者),而是更希望自己能成为一个足球运动员(软件设计编程者),能够亲自上场比赛,并且最终能成为球星(软件架构师)。我仔细地阅读这些被誉为经典的著作,认真地实践其中代码,但是我总是半途而废、坚持不下去,我痛恨自己意志力的薄弱、憎恶自己无端地放弃,难道我真的就是那么的笨?
痛定思痛,反思悔过。我终于发现,贝利、马拉多纳不管老、胖是用来敬仰的,贝克汉姆、罗纳尔迪尼奥不管美、丑是用来欣赏的,但他们的球技……嗨,客气地说,是不容易学会的,客观地说,是不可能学得会的。为什么会这样?原来,我学习中缺了一个很重要的环节,我们在看到了精彩的球赛,欣赏球星高超球技的同时,却忽略了球星的成长过程。他们尽管有一定天分,但却也是从最底层通过努力一点一点慢慢显露出来的,我们需要的不仅仅是世界杯上的那定乾坤的一脚,更需要这一脚之前是如何练出那种神奇的方法,对于程序员来讲,精彩的代码是如何想出来的,要比看到精彩的代码更加令人期待。
本书显然不是培养足球明星(软件架构师)的俱乐部,而是训练足球基本功的学校,培训的是初学足球的小球员(面向对象的程序员),本书希望的是读者阅读后可以打好面向对象的基础,从而更加容易并深入的去理解和感受GoF的《设计模式》以及其他大师作品的魅力。
本书定位
本书是在学习众多大师智慧结晶的图书作品、分享了网上多位朋友的实践经验的基础上,加之自己的编程感受写出来的。正如牛顿有句名言:“如果说我比别人看得更远些,那是因为我站在了巨人的肩上。”但显然,本书并没有创造或发现什么模式,因此谈不上站在