产品特色
编辑推荐
《大话设计模式》是准备攀登面向对象编程高峰朋友们的引路人和提携者;《大话设计模式》是学习、体会和领悟了众多大师智慧结晶后的图书作品;《大话设计模式》是你深入理解和感受GoF的《设计模式》及其它大师作品的必备书籍;《大话设计模式》授之以“鱼”,更授之以“渔”。
感受设计演变过程中所蕴含的大智慧,体会乐与怒的程序人生中值得回味的一幕幕。
设计模式的趣味解读,面向对象的深入剖析。
在诙谐与温馨中做一次面向对象编程思维的体操。
内容简介
本书通篇都是以情景对话的形式,用多个小故事或编程示例来组织讲解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章是对设计模式的全面总结。附录部分是通过一个例子的演变为初学者介绍了面向对象的基本概念。本书的特色是通过小菜与大鸟的趣味问答,在讲解程序的不断重构和演变过程中,把设计模式的学习门槛降低,让初学者可以更加容易地理解——为什么这样设计才是好的?是怎样想到这样设计的?以达到不但授之以“鱼”,还授之以“渔”的目的。引导读者体会设计演变过程中蕴藏的大智慧。
本书适合编程初学者或希望在面向对象编程上有所提高的开发人员阅读。
作者简介
程杰,高级软件工程师&高级培训讲师。从事软件开发一线工作近八年时间。曾在申银万国证券公司、上海杨浦区政府、朝华集团下属网游公司、香港晨兴集团等多行业项目开发中担任主程及项目负责人,有丰富的大中型软件开发经验,以及多年的软件设计与项目管理经验。曾任加拿大慧桥培训中心讲师,主持.NET高级软件工程师的培训工作;早年从事高中数学教学工作,曾在江苏常州重点高中任教时获得过市教学一等奖,这些教学和培训经历让作者对如何以易懂的语言讲解艰深的技术知识有了深刻的理解。他也是“博客园”网站的博客http://cj723.cnblogs.com/的连载文章《小菜编程成长记》的作者。
本书作者集多年实际项目开发经验和丰富教学培训经验于一身,准确把握住编程初学者的视角,以浅显幽默的语言向读者诠释了面向对象设计模式的精髓。
目录
第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 适配器模式
17.3 何时使用适配器模式
17.4 篮球翻译适配器
17.5 适配器模式的.NET应用
17.6 扁鹊的医术
第18章 如果再回到从前--备忘录模式
18.1 如果再给我一次机会……
18.2 游戏存进度
18.3 备忘录模式
18.4 备忘录模式基本代码
18.5 游戏进度备忘
第19章 分公司=一部门--组合模式
19.1 分公司不就是一部门吗?
19.2 组合模式
19.3 透明方式与安全方式
19.4 何时使用组合模式
19.5 公司管理系统
19.6 组合模式好处
第20章 想走?可以!先买票--迭代器模式
20.1 乘车买票,不管你是谁!
20.2 迭代器模式
20.3 迭代器实现
20.4 .NET的迭代器实现
20.5 迭代高手
第21章 有些类也需计划生育--单例模式
21.1 类也需要计划生育
21.2 判断对象是否是null
21.3 生还是不生是自己的责任
21.4 单例模式
21.5 多线程时的单例
21.6 双重锁定
21.7 静态初始化
第22章 手机软件何时统一--桥接模式
22.1 凭什么你的游戏我不能玩
22.2 紧耦合的程序演化
22.3 合成/聚合复用原则
22.4 松耦合的程序
22.5 桥接模式
22.6 桥接模式基本代码
22.7 我要开发"好"游戏
第23章 烤羊肉串引来的思考--命令模式
23.1 吃烤羊肉串!
23.2 烧烤摊vs.烧烤店
23.3 紧耦合设计
23.4 松耦合设计
23.5 松耦合后
23.6 命令模式
23.7 命令模式作用
第24章 加薪非要老总批?--职责链模式
24.1 老板,我要加薪!
24.2 加薪代码初步
24.3 职责链模式
24.4 职责链的好处
24.5 加薪代码重构
24.6 加薪成功
第25章 世界需要和平--中介者模式
25.1 世界需要和平!
25.2 中介者模式
25.3 安理会做中介
25.4 中介者模式优缺点
第26章 项目多也别傻做--享元模式
26.1 项目多也别傻做!
26.2 享元模式
26.3 网站共享代码
26.4 内部状态与外部状态
26.5 享元模式应用
第27章 其实你不懂老板的心--解释器模式
27.1 其实你不懂老板的心
27.2 解释器模式
27.3 解释器模式好处
27.4 音乐解释器
27.5 音乐解释器实现
27.6 料事如神
第28章 男人和女人--访问者模式
28.1 男人和女人!
28.2 最简单的编程实现
28.3 简单的面向对象实现
28.4 用了模式的实现
28.5 访问者模式
28.6 访问者模式基本代码
28.7 比上不足,比下有余
第29章 OOTV杯超级模式大赛--模式总结
29.1 演讲任务
29.2 报名参赛
29.3 超模大赛开幕式
29.4 创建型模式比赛
29.5 结构型模式比赛
29.6 行为型模式一组比赛
29.7 行为型模式二组比赛
29.8 决赛
29.9 梦醒时分
29.10 没有结束的结尾
附 录 A 培训实习生--面向对象基础
A.1 培训实习生
A.2 类与实例
A.3 构造方法
A.4 方法重载
A.5 属性与修饰符
A.6 封装
A.7 继承
A.8 多态
A.9 重构
A.10 抽象类
A.11 接口
A.12 集合
A.13 泛型
A.14 委托与事件
A.15 客套
附 录 B 参考文献
前言/序言
本书是一本程序集?NO。
本书是一本故事集?NO。
本书是一本通过故事讲述程序如何设计的方法集。
本书是给连Hello World都没写过的非程序员看的书吗?NO。
本书是给玩过穿孔纸带(0/1)、写过汇编、BASIC、C、C++、Delphi、Java、C#等语言,开发过覆盖全球、使用人数过亿、数百万行代码等大型系统的骨灰级程序员看的书吗?NO。
本书希望能给渴望了解OO世界的初学者、困惑于僵硬、脆弱、无法复用的代码编程体验者、一直打着OO编程的旗号,做着过程式开发的基于对象的编程实践者一些好的建议和提示。
本书起因
写本书源于我一次做培训的经历,学生大多是计算机专业的学生或有过一定经验的在职开发者。他们都知道类、方法、构造方法、甚至抽象类、接口等概念,并用 Visual Studio写过不少的Windows或Web程序,可是当我提问为什么要用面向对象,它的好处在哪里时,却没有人能完整地讲得出来,多数人的反应是,概念知道的,就是表达不清楚。
针对于此,我就举了中国古代的四大发明中活字印刷的例子(见第1章),通过一个虚构的三国曹操做诗的情景,把面向对象的几大好处讲解了一下,学生普遍都感觉通俗易懂,觉得这样的教学比直接告诉面向对象有什么好处要更加容易理解和记忆。
这就使得我不断地思考这样一个问题,学一门技术是否需要趣味性、通俗性的引导。
我在思考中发现,看小说时,一般情况下我都可以完整地读完它,而阅读技术方面的图书,却很少有真正的每章每页的仔细阅读。尽管这两者是有很大区别,技术书中可能有不少知识是已经学会或暂时用不上的内容,但也不得不承认,小说之所以可以坚持读完是因为对它感兴趣,作者的文字吸引你。而有些技术书的枯燥乏味使得阅读产生了困难,通常读个前几章就留待以后再说了。
技术课的教学同样如此,除非学生是抱着极大的学习动机来参与其中,否则照本宣科的教学、枯燥乏味的讲解,学生一定会被庞杂的概念和复杂的逻辑搅晕了头脑,致使效果大打折扣。也正因为此,往往造成部分学生,学了四年的计算机编程,却可能连面向对象有什么好处都还说不清。
为什么不可以让技术书带点趣味性呢,哪怕这些趣味性与所讲的技术并不十分贴切,只要不是影响技术核心的本质,不产生重大的错误,让读者能轻松阅读它,并且有了一定的了解和感悟,这要比一本书写得高深无比,却被长期束之高阁要好得多。
也正是这个原因,本人开始了关于设计模式的趣味性写作的尝试。
本书读者
显然本书不是给无任何编程经验的人看的,对于想入这一行的朋友来说,找一门编程语言,从头开始或许才是正道。而本书也不太适合有了多年面向对象开发经验,对常用的设计模式了如指掌的人看的。毕竟这里更多的是一些基础性的东西。
我时常拿程序员的成长与足球运动员的成长做对比。
GoF 的《设计模式》好比是世界顶级足球射门集锦,《重构》、《敏捷软件开发》、《设计模式解析》好比是一场场最精彩的足球比赛。我为之疯狂,为之着迷。可是我并不只是想做一个球迷(软件使用者),而是更希望自己能成为一个足球运动员(软件设计编程者),能够亲自上场比赛,并且最终能成为球星(软件架构师)。我仔细地阅读这些被誉为经典的著作,认真地实践其中代码,但是我总是半途而废、坚持不下去,我痛恨自己意志力的薄弱、憎恶自己无端地放弃,难道我真的就是那么的笨?
痛定思痛,反思悔过。我终于发现,贝利、马拉多纳不管老、胖是用来敬仰的,贝克汉姆、罗纳尔迪尼奥不管美、丑是用来欣赏的,但他们的球技……嗨,客气地说,是不容易学会的,客观地说,是不可能学得会的。为什么会这样?原来,我学习中缺了一个很重要的环节,我们在看到了精彩的球赛,欣赏球星高超球技的同时,却忽略了球星的成长过程。他们尽管有一定天分,但却也是从最底层通过努力一点一点慢慢显露出来的,我们需要的不仅仅是世界杯上的那定乾坤的一脚,更需要这一脚之前是如何练出那种神奇的方法,对于程序员来讲,精彩的代码是如何想出来的,要比看到精彩的代码更加令人期待。
本书显然不是培养足球明星(软件架构师)的俱乐部,而是训练足球基本功的学校,培训的是初学足球的小球员(面向对象的程序员),本书希望的是读者阅读后可以打好面向对象的基础,从而更加容易并深入的去理解和感受GoF的《设计模式》以及其他大师作品的魅力。
本书定位
本书是在学习众多大师智慧结晶的图书作品、分享了网上多位朋友的实践经验的基础上,加之自己的编程感受写出来的。正如牛顿有句名言:“如果说我比别人看得更远些,那是因为我站在了巨人的肩上。”但显然,本书并没有创造或发现什么模式,因此谈不上站在巨人肩膀上看得更远。所以作者更希望本书能成为一些准备攀登面向对象编程高峰的朋友的登山引路人、提携者,在您登山途中迷路时给予指引,在您峭壁攀岩摔跤时给予保护。
本书特色
本书有两个特色,第一特色是重视过程。看了太多的计算机编程类的图书,大多数书籍都是集中在讲授优秀的解决方案或者一个完美的程序样例,但对这些解决方案和程序的演变过程却重视不够,好书之所以好,就是因为作者可以站在学习者的角度去讲解问题所在,让学习门槛降低。《重构与模式》中有一句经典之语:“如果想成为一名更优秀的软件设计师,了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程中蕴藏着大智慧。”本人就希望能通过小菜与大鸟的对话,在不断地提问与回答过程中,在程序的不断重构演变中,把设计模式的学习门槛降低,让初学者可以更加容易地理解,为什么这样设计才是好,是如何想到这样设计的。
本书的第二个特色就是贴近生活。尽管编程是严谨的,不容大话和戏说。但生活却是多姿多彩的,而设计模式也不是完全孤立于现实世界而凭空想出来的理论。事实上所有的模式都可以在生活中找到对应。因此,通过主人公小菜和大鸟的对话,将求职、面试、工作、交友、投资、兼职、办公室文化、生活百味等等非常接近程序员生活原貌的场景写到了书中,用一个个小故事来引出模式,会让读者相对轻松地进入学习设计模式的状态。当然,此举的最大目的还是为了深入浅出,而非纯粹噱头。
本书内容
本书通篇都是以情景对话的形式,用一个又一个的小故事或编程示例来组织的。共分为四个部分。第一部分是面向对象的意义和好处以及几个重要的设计原则,通过小菜面试的失败引出;第二部分是详细讲解23个设计模式;第三部分是对设计模式的总结,利用小菜梦到的超级模式大赛的场景,把所有的面向对象和模式概念都拟人化来趣味性的总结设计模式之间的异同和关键点。第四部分是附录,主要是针对对面向对象不熟悉读者的一个补充,通过一个例子的演变介绍了类、封装、继承、多态、接口、事件等概念。
本书人物及背景
小菜:原名蔡遥,22岁,上海人,上海某大学计算机专业大学四年级学生,成绩一般,考研刚结束,即将毕业,正求职找工作。
大鸟:原名李大辽,29岁,小菜的表哥,云南昆明人,毕业后长期从事软件开发和管理工作,近期到上海发展,借住小菜家在宝山的空套房内。小菜以向大鸟学习为由,也从市区父母家搬到宝山与大鸟同住。
本书研读方法
本书建议按顺序阅读,如果您感觉由于面向对象知识的匮乏,例如对继承、多态、接口、抽象类的理解不足,造成阅读上的困难,不妨先阅读附录一的“培训实习生——面向对象基础”部分,然后再从第1章开始阅读。如果您已经对不少设计模式熟悉,也不妨挑选不熟悉的模式章节阅读。
尽管本书中的代码都提供下载,但不经过读者的自己手动输入过程,其实阅读的效果是大打折扣的。强烈建议读者根据样例自己写程序,只有在运行出错,达不到预期效果时再查看本书提供的源程序,这样或许才是最好的学习方法。有问题可及时与我联系。我的电子邮箱是chengjielong@163.com,博客是 http://cj723.cnblogs.com/。
本书中的很多精华都来自许多大师作品,建议读者通过笔记形式记录,这将有助于您
大话设计模式 下载 mobi epub pdf txt 电子书 格式