图解设计模式
查字典图书网
当前位置: 查字典 > 图书网 > 编程> 图解设计模式

图解设计模式

图解设计模式

0.0

作者: [日] 结城浩
出版社: 人民邮电出版社
译者: 杨文轩
出版年: 2017-1-1
页数: 366
定价: CNY 79.00
装帧: 平装
丛书: 图解入门系列
ISBN: 9787115439499

我要收藏

内容简介:

原版连续畅销12年、重印25次!

194张图表 + Java示例代码 = 轻松理解GoF的23种设计模式

《程序员的数学》《数学女孩》作者结城浩又一力作

◆图文并茂

194张图表(包括57张UML类图)穿插文中,帮助理解各设计模式

◆通俗易懂

用浅显的语言逐一讲解23种设计模式,读完此书会发现GoF书不再晦涩难懂

◆专业实用

编写了Java程序代码来实现设计模式,每章附带练习题和答案,用以熟练掌握设计 模式

◆拓展进阶

必要时对Java语言的功能进行了补充说明,可加深对Java的理解。此外,如果了解C++语言,同样可以轻松理解本书内容

本书适合以下读者阅读

•对面向对象开发感兴趣的人

•对设计模式感兴趣的人(特别是阅读了GoF书但是觉得难以理解的人)

•所有Java程序员(特别是对抽象类和接口的理解不充分的人)

本书以浅显易懂的语言逐一说明了GoF的23种设计模式。在讲解过程中,不仅搭配了丰富的图片,而且理论结合实例,用Java语言编写代码实现了设计模式的程序,让程序真正地运行起来,并提供了运用模式解决具体问题的练习题和答案。除此以外,本书在必要时还对Java语言的功能进行补充说明,以加深读者对Java的理解。

作者简介:

结城浩

生于1963年,日本资深技术作家和程序员。在编程语言、设计模式、数学、加密技术等领域,编写了很多深受欢迎的入门书。代表作有《数学女孩》系列、《程序员的数学》、《图解密码技术》等。

目录:

第1部分 适应设计模式1

第1章 Iterator模式——一个一个遍历1

1.1 Iterator模式2

1.2 示例程序2

Aggregate接口3

Iterator接口5

Book类5

BookShelf类5

BookShelfIteraotr类6

Main类7

1.3 Iterator模式中的登场角色8

1.4 拓展思路的要点9

不管实现如何变化,都可以使用Iterator9

难以理解抽象类和接口9

Aggregate和Iterator的对应9

容易弄错“下一个”10

还容易弄错“最后一个”10

多个Iterator10

迭代器的种类多种多样10

不需要deleteIterator10

1.5 相关的设计模式11

1.6 本章所学知识11

1.7 练习题11

第2章 Adapter模式——加个“适配器”以便于复用13

2.1 Adapter模式14

2.2 示例程序(1)(使用继承的适配器)14

Banner类15

Print接口16

PrintBanner类16

Main类16

2.3 示例程序(2)(使用委托的示例程序)17

Print类18

PrintBanner类18

2.4 Adapter模式中的登场角色18

2.5 拓展思路的要点19

什么时候使用Adapter模式19

如果没有现成的代码20

版本升级与兼容性20

功能完全不同的类20

2.6 相关的设计模式20

2.7 本章所学知识21

2.8 练习题21

第2部分 交给子类23

第3章 Template Method模式——将具体处理交给子类23

3.1 Template Method模式24

什么是模板24

什么是Template Method模式24

3.2 示例程序24

AbstractDisplay类25

CharDisplay类26

StringDisplay类27

Main类28

3.3 Template Method模式中的登场角色28

3.4 拓展思路的要点29

可以使逻辑处理通用化29

父类与子类之间的协作29

父类与子类的一致性29

3.5 相关的设计模式30

3.6 延伸阅读:类的层次与抽象类30

父类对子类的要求30

抽象类的意义30

父类与子类之间的协作31

3.7 本章所学知识31

3.8 练习题31

第4章 Factory Method模式——将实例的生成交给子类33

4.1 Factory Method模式34

4.2 示例程序34

Product类35

Factory类35

IDCard类36

IDCardFactory类36

Main类37

4.3 Factory Method模式中的登场角色37

4.4 拓展思路的要点39

框架与具体加工39

生成实例——方法的三种实现方式39

使用模式与开发人员之间的沟通40

4.5 相关的设计模式40

4.6 本章所学知识41

4.7 练习题41

第3部分 生成实例43

第5章 Singleton模式——只有一个实例43

5.1 Singleton模式44

5.2 示例程序44

Singleton类44

Main类45

5.3 Singleton模式中的登场角色46

5.4 拓展思路的要点46

为什么必须设置限制46

何时生成这个唯一的实例46

5.5 相关的设计模式47

5.6 本章所学知识47

5.7 练习题47

第6章 Prototype模式——通过复制生成实例49

6.1 Prototype模式50

6.2 示例程序50

Product接口51

Manager类52

MessageBox类52

UnderlinePen类53

Main类54

6.3 Prototype模式中的登场角色55

6.4 拓展思路的要点56

不能根据类来生成实例吗56

类名是束缚吗56

6.5 相关的设计模式57

6.6 延伸阅读:clone方法和java.lang.Clonable接口57

Java语言的clone57

clone方法是在哪里定义的58

需要实现Cloneable的哪些方法58

clone方法进行的是浅复制58

6.7 本章所学知识58

6.8 练习题59

第7章 Builder模式——组装复杂的实例61

7.1 Builder模式62

7.2 示例程序62

Builder类63

Director类63

TextBuilder类64

HTMLBuilder类65

Main类65

7.3 Builder模式中的登场角色67

7.4 相关的设计模式69

7.5 拓展思路的要点69

谁知道什么69

设计时能够决定的事情和不能决定的事情70

代码的阅读方法和修改方法70

7.6 本章所学知识70

7.7 练习题70

第8章 Abstract Factory模式——将关联零件组装成产品73

8.1 Abstract Factory模式74

8.2 示例程序74

抽象的零件:Item类77

抽象的零件:Link类78

抽象的零件:Tray类78

抽象的产品:Page类79

抽象的工厂:Factory类79

使用工厂将零件组装称为产品:Main类80

具体的工厂:ListFactory类81

具体的零件:ListLink类82

具体的零件:ListTray类82

具体的产品:ListPage类83

8.3 为示例程序增加其他工厂84

具体的工厂:TableFactory类85

具体的零件:TableLink类86

具体的零件:TableTray类86

具体的产品:TablePage类87

8.4 Abstract Factory模式中的登场角色87

8.5 拓展思路的要点89

易于增加具体的工厂89

难以增加新的零件89

8.6 相关的设计模式89

8.7 延伸阅读:各种生成实例的方法的介绍90

8.8 本章所学知识91

8.9 练习题91

第4部分 分开考虑93

第9章 Bridge模式——将类的功能层次结构与实现层次结构分离93

9.1 Bridge模式94

9.2 示例程序95

类的功能层次结构:Display类96

类的功能层次结构:CountDisplay类97

类的实现层次结构:DisplayImpl类97

类的实现层次结构:StringDisplayImpl类98

Main类98

9.3 Bridge模式中的登场角色99

9.4 拓展思路的要点100

分开后更容易扩展100

继承是强关联,委托是弱关联100

9.5 相关的设计模式101

9.6 本章所学知识101

9.7 练习题102

第10章 Strategy模式——整体地替换算法103

10.1 Strategy模式104

10.2 示例程序104

Hand类105

Strategy接口106

WinningStrategy类106

ProbStrategy类107

Player类109

Main类109

10.3 Strategy模式中的登场角色111

10.4 拓展思路的要点112

为什么需要特意编写Strategy角色112

程序运行中也可以切换策略112

10.5 相关的设计模式113

10.6 本章所学知识113

10.7 练习题113

第5部分 一致性117

第11章 Composite模式——容器与内容的一致性117

11.1 Composite模式118

11.2 示例程序118

Entry类119

File类120

Directory类121

FileTreatMentException类122

Main类122

11.3 Composite模式中的登场角色124

11.4 拓展思路的要点125

多个和单个的一致性125

Add方法应该放在哪里126

到处都存在递归结构126

11.5 相关的设计模式126

11.6 本章所学知识127

11.7 练习题127

第12章 Decorator模式——装饰边框与被装饰物的一致性129

12.1 Decorator模式130

12.2 示例程序130

Display类131

StringDisplay类132

Border类132

SideBorder类133

FullBorder类134

Main类135

12.3 Decorator模式中的登场角色136

12.4 拓展思路的要点137

接口(API)的透明性137

在不改变被装饰物的前提下增加功能138

可以动态地增加功能138

只需要一些装饰物即可添加许多功能138

java.io包与Decorator模式138

导致增加许多很小的类139

12.5 相关的设计模式139

12.6 延伸阅读:继承和委托中的一致性140

继承——父类和子类的一致性140

委托——自己和被委托对象的一致性140

12.7 本章所学知识142

12.8 练习题142

第6部分 访问数据结构145

第13章 Visitor模式——访问数据结构并处理数据145

13.1 Visitor模式146

13.2 示例程序146

Visitor类147

Element接口148

Entry类148

File类148

Directory类149

ListVisitor类150

FileTreatmentException类151

Main类151

Visitor与Element之间的相互调用152

13.3 Visitor模式中的登场角色154

13.4 拓展思路的要点155

双重分发155

为什么要弄得这么复杂155

开闭原则——对扩展开放,对修改关闭155

易于增加ConcreteVisitor角色156

难以增加ConcreteElement角色156

Visitor工作所需的条件156

13.5 相关的设计模式157

13.6 本章所学知识157

13.7 练习题157

第14章 Chain of Responsibility模式——推卸责任161

14.1 Chain of Responsibility模式162

14.2 示例程序162

Trouble类163

Support类163

NoSupport类164

LimitSupport类164

OddSupport类165

SpecialSupport类165

Main类166

14.3 Chain of Responsibility模式中的登场角色167

14.4 拓展思路的要点168

弱化了发出请求的人和处理请求的人之间的关系168

可以动态地改变职责链168

专注于自己的工作169

推卸请求会导致处理延迟吗169

14.5 相关的设计模式169

14.6 本章所学知识169

14.7 练习题169

第7部分 简单化171

第15章 Facade模式——简单窗口171

15.1 Facade模式172

15.2 示例程序172

Database类173

HtmlWriter类174

PageMaker类175

Main类176

15.3 Facade模式中的登场角色176

15.4 拓展思路的要点177

Facade角色到底做什么工作177

递归地使用Facade模式178

开发人员不愿意创建Facade角色的原因——心理原因178

15.5 相关的设计模式178

15.6 本章所学知识178

15.7 练习题179

第16章 Mediator模式——只有一个仲裁者181

16.1 Mediator模式182

16.2 示例程序182

Mediator接口185

Colleague接口186

ColleagueButton类186

ColleagueTextField类187

ColleagueCheckbox类188

LoginFrame类188

Main类191

16.3 Mediator模式中的登场角色191

16.4 拓展思路的要点192

当发生分散灾难时192

通信线路的增加193

哪些角色可以复用193

16.5 相关的设计模式193

16.6 本章所学知识193

16.7 练习题194

第8部分 管理状态195

第17章 Observer模式——发送状态变化通知195

17.1 Observer模式196

17.2 示例程序196

Observer接口196

NumberGenerator类197

RandomNumberGenerator类198

DigitObserver类198

GraphObserver类199

Main类199

17.3 Observer模式中的登场角色200

17.4 拓展思路的要点201

这里也出现了可替换性201

Observer的顺序202

当Observer的行为会对Subject产生影响时202

传递更新信息的方式202

从“观察”变为“通知”203

Model/View/Controller(MVC)203

17.5 延伸阅读:java.util.Observer接口203

17.6 相关的设计模式204

17.7 本章所学知识204

17.8 练习题204

第18章 Memento模式——保存对象状态207

18.1 Memento模式208

18.2 示例程序208

Memento类209

Gamer类210

Main类211

18.3 Memento模式中的登场角色215

18.4 拓展思路的要点216

两种接口(API)和可见性216

需要多少个Memento217

Memento的有效期限是多久217

划分Caretaker角色和Originator角色的意义217

18.5 相关的设计模式218

18.6 本章所学知识218

18.7 练习题218

第19章 State模式——用类表示状态221

19.1 State模式222

19.2 示例程序222

金库警报系统222

不使用State模式的伪代码223

使用了State模式的伪代码224

State接口226

DayState类226

NightState类227

Context接口228

SafeFrame类228

Main类231

19.3 State模式中的登场角色232

19.4 拓展思路的要点233

分而治之233

依赖于状态的处理233

应当是谁来管理状态迁移233

不会自相矛盾234

易于增加新的状态234

实例的多面性235

19.5 相关的设计模式235

19.6 本章所学知识235

19.7 练习题236

第9部分 避免浪费237

第20章 Flyweight模式——共享对象,避免浪费237

20.1 Flyweight模式238

20.2 示例程序238

BigChar类240

BigCharFactory类241

BigString类242

Main类244

20.3 Flyweight模式中的登场角色244

20.4 拓展思路的要点245

对多个地方产生影响245

Intrinsic与Extrinsic246

不要让被共享的实例被垃圾回收器回收了246

内存之外的其他资源247

20.5 相关的设计模式247

20.6 本章所学知识247

20.7 练习题247

第21章 Proxy模式——只在必要时生成实例249

21.1 Proxy模式250

21.2 示例程序250

Printer类251

Printable接口252

PrinterProxy类253

Main类254

21.3 Proxy模式中的登场角色254

21.4 拓展思路的要点255

使用代理人来提升处理速度255

有必要划分代理人和本人吗256

代理与委托256

透明性256

HTTP代理256

各种Proxy模式257

21.5 相关的设计模式257

21.6 本章所学知识257

21.7 练习题257

第10部分 用类来表现259

第22章 Command模式——命令也是类259

22.1 Command模式260

22.2 示例程序260

Command接口261

MacroCommand类262

DrawCommand类263

Drawable接口263

DrawCanvas类264

Main类265

22.3 Command模式中的登场角色268

22.4 拓展思路的要点269

命令中应该包含哪些信息269

保存历史记录269

适配器269

22.5 相关的设计模式271

22.6 本章所学知识272

22.7 练习题272

第23章 Interpreter模式——语法规则也是类273

23.1 Interpreter模式274

23.2 迷你语言274

迷你语言的命令274

迷你语言程序示例275

迷你语言的语法278

终结符表达式与非终结符表达式279

23.3 示例程序279

Node类281

ProgramNode类281

CommandListNode类282

CommandNode类283

RepeatCommandNode类284

PrimitiveCommandNode类285

Context类285

ParseException类286

Main类287

23.4 Interpreter模式中的登场角色288

23.5 拓展思路的要点289

还有其他哪些迷你语言289

跳过标记还是读取标记290

23.6 相关的设计模式290

23.7 本章所学知识以及本书的结束语290

23.8 练习题290

附录293

附录A 习题解答294

附录B 示例程序的运行步骤359

附录C GoF对设计模式的分类361

附录D 设计模式Q&A362

附录E 参考书籍365

文章试读:大家好,我是结城浩。欢迎阅读《图解设计模式》。 想必大家在编写程序的时候,也曾遇到“咦,好像之前编写过类似的代码”这样的情况。随着开发经验的增加,大家都会在自己的脑海中积累起越来越多的“模式”,然后会将这些“模式”运用于下次开发中。 Eric Gamma、Richard Helm、Ralph Johnson、John Vlissides 等4 人将开发人员的上述“体会”和“内在积累”整...

(查看全部试读)

展开全文
随机来一本书

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

热门标签:
我想说两句
暂无评论
我要写长评
 想读     在读     读过   
评价:
标签(多个标签以“,”分开):