图解设计模式
✍ Scribed by 结城浩
- Publisher
- 人民邮电出版社
- Year
- 2017
- Tongue
- Chinese
- Leaves
- 402
- Series
- 图灵程序设计丛书·图解与入门系列
- Edition
- 1
- Category
- Library
No coin nor oath required. For personal study only.
✦ Synopsis
原版连续畅销12年、重印25次!
194张图表 + Java示例代码 = 轻松理解GoF的23种设计模式
《程序员的数学》《数学女孩》作者结城浩又一力作
◆图文并茂
194张图表(包括57张UML类图)穿插文中,帮助理解各设计模式
◆通俗易懂
用浅显的语言逐一讲解23种设计模式,读完此书会发现GoF书不再晦涩难懂
◆专业实用
编写了Java程序代码来实现设计模式,每章附带练习题和答案,用以熟练掌握设计 模式
◆拓展进阶
必要时对Java语言的功能进行了补充说明,可加深对Java的理解。此外,如果了解C++语言,同样可以轻松理解本书内容
本书适合以下读者阅读
•对面向对象开发感兴趣的人
•对设计模式感兴趣的人(特别是阅读了GoF书但是觉得难以理解的人)
•所有Java程序员(特别是对抽象类和接口的理解不充分的人)
本书以浅显易懂的语言逐一说明了GoF的...
原版连续畅销12年、重印25次!
194张图表 + Java示例代码 = 轻松理解GoF的23种设计模式
《程序员的数学》《数学女孩》作者结城浩又一力作
◆图文并茂
194张图表(包括57张UML类图)穿插文中,帮助理解各设计模式
◆通俗易懂
用浅显的语言逐一讲解23种设计模式,读完此书会发现GoF书不再晦涩难懂
◆专业实用
编写了Java程序代码来实现设计模式,每章附带练习题和答案,用以熟练掌握设计 模式
◆拓展进阶
必要时对Java语言的功能进行了补充说明,可加深对Java的理解。此外,如果了解C++语言,同样可以轻松理解本书内容
本书适合以下读者阅读
•对面向对象开发感兴趣的人
•对设计模式感兴趣的人(特别是阅读了GoF书但是觉得难以理解的人)
•所有Java程序员(特别是对抽象类和接口的理解不充分的人)
本书以浅显易懂的语言逐一说明了GoF的23种设计模式。在讲解过程中,不仅搭配了丰富的图片,而且理论结合实例,用Java语言编写代码实现了设计模式的程序,让程序真正地运行起来,并提供了运用模式解决具体问题的练习题和答案。除此以外,本书在必要时还对Java语言的功能进行补充说明,以加深读者对Java的理解。
✦ Table of Contents
封面
前言
译者序
目录
第1 部分 适应设计模式
第1章 Iterator模式——一个一个遍历
1.1 Iterator模式
1.2 示例程序
Aggregate接口
Iterator接口
Book类
BookShelf类
BookShelfIteraotr类
Main类
1.3 Iterator模式中的登场角色
1.4 拓展思路的要点
不管实现如何变化,都可以使用Iterator
难以理解抽象类和接口
Aggregate和Iterator的对应
容易弄错“下一个”
还容易弄错 “最后一个”
多个Iterator
迭代器的种类多种多样
不需要deleteIterator
1.5 相关的设计模式
1.6 本章所学知识
1.7 练习题
第2章 Adapter模式——加个“适配器”以便于复用
2.1 Adapter模式
2.2 示例程序(1)(使用继承的适配器)
Banner类
Print接口
PrintBanner类
Main类
2.3 示例程序(2)(使用委托的示例程序)
Print类
PrintBanner类
2.4 Adapter模式中的登场角色
2.5 拓展思路的要点
什么时候使用Adapter模式
如果没有现成的代码
版本升级与兼容性
功能完全不同的类
2.6 相关的设计模式
2.7 本章所学知识
2.8 练习题
第2 部分 交给子类
第3章 Template Method模式——将具体处理交给子类
3.1 Template Method模式
什么是模板
什么是Template Method模式
3.2 示例程序
AbstractDisplay类
CharDisplay类
StringDisplay类
Main类
3.3 Template Method模式中的登场角色
3.4 拓展思路的要点
可以使逻辑处理通用化
父类与子类之间的协作
父类与子类的一致性
3.5 相关的设计模式
3.6 延伸阅读:类的层次与抽象类
父类对子类的要求
抽象类的意义
父类与子类之间的协作
3.7 本章所学知识
3.8 练习题
第4章 Factory Method模式——将实例的生成交给子类
4.1 Factory Method模式
4.2 示例程序
Product类
Factory类
IDCard类
IDCardFactory类
Main类
4.3 Factory Method模式中的登场角色
4.4 拓展思路的要点
框架与具体加工
生成实例——方法的三种实现方式
使用模式与开发人员之间的沟通
4.5 相关的设计模式
4.6 本章所学知识
4.7 练习题
第3 部分 生成实例
第5章 Singleton模式——只有一个实例
5.1 Singleton模式
5.2 示例程序
Singleton类
Main类
5.3 Singleton模式中的登场角色
5.4 拓展思路的要点
为什么必须设置限制
何时生成这个唯一的实例
5.5 相关的设计模式
5.6 本章所学知识
5.7 练习题
第6章 Prototype模式——通过复制生成实例
6.1 Prototype模式
6.2 示例程序
Product接口
Manager类
MessageBox类
UnderlinePen类
Main类
6.3 Prototype模式中的登场角色
6.4 拓展思路的要点
不能根据类来生成实例吗
类名是束缚吗
6.5 相关的设计模式
6.6 延伸阅读:clone方法和java.lang.Clonable接口
Java语言的clone
clone方法是在哪里定义的
需要实现Cloneable的哪些方法
clone方法进行的是浅复制
6.7 本章所学知识
6.8 练习题
第7章 Builder模式——组装复杂的实例
7.1 Builder模式
7.2 示例程序
Builder类
Director类
TextBuilder类
HTMLBuilder类
Main类
7.3 Builder模式中的登场角色
7.4 相关的设计模式
7.5 拓展思路的要点
谁知道什么
设计时能够决定的事情和不能决定的事情
代码的阅读方法和修改方法
7.6 本章所学知识
7.7 练习题
第8章 Abstract Factory模式——将关联零件组装成产品
8.1 Abstract Factory模式
8.2 示例程序
抽象的零件:Item类
抽象的零件:Link类
抽象的零件:Tray类
抽象的产品:Page类
抽象的工厂:Factory类
使用工厂将零件组装称为产品:Main类
具体的工厂:ListFactory类
具体的零件:ListLink类
具体的零件:ListTray类
具体的产品:ListPage类
8.3 为示例程序增加其他工厂
具体的工厂:TableFactory类
具体的零件:TableLink类
具体的零件:TableTray类
具体的产品:TablePage类
8.4 Abstract Factory模式中的登场角色
8.5 拓展思路的要点
易于增加具体的工厂
难以增加新的零件
8.6 相关的设计模式
8.7 延伸阅读:各种生成实例的方法的介绍
8.8 本章所学知识
8.9 练习题
第4 部分 分开考虑
第9章 Bridge模式——将类的功能层次结构与实现层次结构分离
9.1 Bridge模式
9.2 示例程序
类的功能层次结构:Display类
类的功能层次结构:CountDisplay类
类的实现层次结构:DisplayImpl类
类的实现层次结构:StringDisplayImpl类
Main类
9.3 Bridge模式中的登场角色
9.4 拓展思路的要点
分开后更容易扩展
继承是强关联,委托是弱关联
9.5 相关的设计模式
9.6 本章所学知识
9.7 练习题
第10章 Strategy模式——整体地替换算法
10.1 Strategy模式
10.2 示例程序
Hand类
Strategy接口
WinningStrategy类
ProbStrategy类
Player类
Main类
10.3 Strategy模式中的登场角色
10.4 拓展思路的要点
为什么需要特意编写Strategy角色
程序运行中也可以切换策略
10.5 相关的设计模式
10.6 本章所学知识
10.7 练习题
第5 部分 一致性
第11章 Composite模式——容器与内容的一致性
11.1 Composite模式
11.2 示例程序
Entry类
File类
Directory类
FileTreatMentException类
Main类
11.3 Composite模式中的登场角色
11.4 拓展思路的要点
多个和单个的一致性
Add方法应该放在哪里
到处都存在递归结构
11.5 相关的设计模式
11.6 本章所学知识
11.7 练习题
第12章 Decorator模式——装饰边框与被装饰物的一致性
12.1 Decorator模式
12.2 示例程序
Display类
StringDisplay类
Border类
SideBorder类
FullBorder类
Main类
12.3 Decorator模式中的登场角色
12.4 拓展思路的要点
接口(API)的透明性
在不改变被装饰物的前提下增加功能
可以动态地增加功能
只需要一些装饰物即可添加许多功能
java.io包与Decorator模式
导致增加许多很小的类
12.5 相关的设计模式
12.6 延伸阅读:继承和委托中的一致性
继承——父类和子类的一致性
委托——自己和被委托对象的一致性
12.7 本章所学知识
12.8 练习题
第6 部分 访问数据结构
第13章 Visitor模式——访问数据结构并处理数据
13.1 Visitor模式
13.2 示例程序
Visitor类
Element接口
Entry类
File类
Directory类
ListVisitor类
FileTreatmentException类
Main类
Visitor与Element之间的相互调用
13.3 Visitor模式中的登场角色
13.4 拓展思路的要点
双重分发
为什么要弄得这么复杂
开闭原则——对扩展开放,对修改关闭
易于增加ConcreteVisitor角色
难以增加ConcreteElement角色
Visitor工作所需的条件
13.5 相关的设计模式
13.6 本章所学知识
13.7 练习题
第14章 Chain of Responsibility模式——推卸责任
14.1 Chain of Responsibility模式
14.2 示例程序
Trouble类
Support类
NoSupport类
LimitSupport类
OddSupport类
SpecialSupport类
Main类
14.3 Chain of Responsibility模式中的登场角色
14.4 拓展思路的要点
弱化了发出请求的人和处理请求的人之间的关系
可以动态地改变职责链
专注于自己的工作
推卸请求会导致处理延迟吗
14.5 相关的设计模式
14.6 本章所学知识
14.7 练习题
第7 部分 简单化
第15章 Facade模式——简单窗口
15.1 Facade模式
15.2 示例程序
Database类
HtmlWriter类
PageMaker类
Main类
15.3 Facade模式中的登场角色
15.4 拓展思路的要点
Facade角色到底做什么工作
递归地使用Facade模式
开发人员不愿意创建Facade角色的原因——心理原因
15.5 相关的设计模式
15.6 本章所学知识
15.7 练习题
第16章 Mediator模式——只有一个仲裁者
16.1 Mediator模式
16.2 示例程序
Mediator接口
Colleague接口
ColleagueButton类
ColleagueTextField类
ColleagueCheckbox类
LoginFrame类
Main类
16.3 Mediator模式中的登场角色
16.4 拓展思路的要点
当发生分散灾难时
通信线路的增加
哪些角色可以复用
16.5 相关的设计模式
16.6 本章所学知识
16.7 练习题
第8 部分 管理状态
第17章 Observer模式——发送状态变化通知
17.1 Observer模式
17.2 示例程序
Observer接口
NumberGenerator类
RandomNumberGenerator类
DigitObserver类
GraphObserver类
Main类
17.3 Observer模式中的登场角色
17.4 拓展思路的要点
这里也出现了可替换性
Observer的顺序
当Observer的行为会对Subject产生影响时
传递更新信息的方式
从“观察”变为“通知”
Model/View/Controller(MVC)
17.5 延伸阅读:java.util.Observer接口
17.6 相关的设计模式
17.7 本章所学知识
17.8 练习题
第18章 Memento模式——保存对象状态
18.1 Memento模式
18.2 示例程序
Memento类
Gamer类
Main类
18.3 Memento模式中的登场角色
18.4 拓展思路的要点
两种接口(API)和可见性
需要多少个Memento
Memento的有效期限是多久
划分Caretaker角色和Originator角色的意义
18.5 相关的设计模式
18.6 本章所学知识
18.7 练习题
第19章 State模式——用类表示状态
19.1 State模式
19.2 示例程序
金库警报系统
不使用State模式的伪代码
使用了State模式的伪代码
State接口
DayState类
NightState类
Context接口
SafeFrame类
Main类
19.3 State模式中的登场角色
19.4 拓展思路的要点
分而治之
依赖于状态的处理
应当是谁来管理状态迁移
不会自相矛盾
易于增加新的状态
实例的多面性
19.5 相关的设计模式
19.6 本章所学知识
19.7 练习题
第9 部分 避免浪费
第20章 Flyweight模式——共享对象,避免浪费
20.1 Flyweight模式
20.2 示例程序
BigChar类
BigCharFactory类
BigString类
Main类
20.3 Flyweight模式中的登场角色
20.4 拓展思路的要点
对多个地方产生影响
Intrinsic与Extrinsic
不要让被共享的实例被垃圾回收器回收了
内存之外的其他资源
20.5 相关的设计模式
20.6 本章所学知识
20.7 练习题
第21章 Proxy模式——只在必要时生成实例
21.1 Proxy模式
21.2 示例程序
Printer类
Printable接口
PrinterProxy类
Main类
21.3 Proxy模式中的登场角色
21.4 拓展思路的要点
使用代理人来提升处理速度
有必要划分代理人和本人吗
代理与委托
透明性
HTTP代理
各种Proxy模式
21.5 相关的设计模式
21.6 本章所学知识
21.7 练习题
第10 部分 用类来表现
第22章 Command模式——命令也是类
22.1 Command模式
22.2 示例程序
Command接口
MacroCommand类
DrawCommand类
Drawable接口
DrawCanvas类
Main类
22.3 Command模式中的登场角色
22.4 拓展思路的要点
命令中应该包含哪些信息
保存历史记录
适配器
22.5 相关的设计模式
22.6 本章所学知识
22.7 练习题
第23章 Interpreter模式——语法规则也是类
23.1 Interpreter模式
23.2 迷你语言
迷你语言的命令
迷你语言程序示例
迷你语言的语法
终结符表达式与非终结符表达式
23.3 示例程序
Node类
ProgramNode类
CommandListNode类
CommandNode类
RepeatCommandNode类
PrimitiveCommandNode类
Context类
ParseException类
Main类
23.4 Interpreter模式中的登场角色
23.5 拓展思路的要点
还有其他哪些迷你语言
跳过标记还是读取标记
23.6 相关的设计模式
23.7 本章所学知识以及本书的结束语
23.8 练习题
附 录
附录A 习题解答
附录B 示例程序的运行步骤
附录C GoF对设计模式的分类
附录D 设计模式Q&A
附录E 参考书籍
封底
📜 SIMILAR VOLUMES
Ben shu zhu yi shuo ming le GoF de 23 ge she ji mo shi,Yong Java yu yan bian xie dai ma shi xian le she ji mo shi de cheng xu,Rang cheng xu zhen zheng di yun xing qi lai,Bing ti gong le yun yong mo shi jie jue ju ti wen ti de lian xi ti he da an.</div>
设计模式是构建大型软件系统最强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 本书通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例化的解析。全书囊括单例设计模式、工厂模式、门面模式、代理模式、观察者模式、命令模式、模板方法模式、复合模式、状态设计模式以及反模式等多种设计模式。 本书适合那些关注软件设计原则,并想将优秀的设计模式应用到Python编程当中的读者阅读,也适合普通的软件工程师、架构师参考。
<p>《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别。第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作