《研磨设计模式》PDF下载

  • 购买积分:21 如何计算积分?
  • 作  者:陈臣,王斌编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2011
  • ISBN:9787302239239
  • 页数:783 页
图书介绍:本书完整覆盖GoF讲述的23个设计模式并加以研磨。初级内容包括每个模式的定义、功能、思路、结构、基本实现等;中高级内容则深入探讨如何理解这些模式,包括模式中蕴含什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点等等。

第1章 设计模式基础 1

1.1 设计模式是什么 2

1.1.1 什么是模式 2

1.1.2 设计模式的概念 2

1.1.3 设计模式的理解 3

1.1.4 设计模式的历史 4

1.2 设计模式有什么 4

1.2.1 设计模式的组成 4

1.2.2 设计模式的分类 4

1.3 设计模式的学习 5

1.3.1 为什么要学习设计模式 5

1.3.2 学习设计模式的层次 5

1.3.3 如何学习设计模式 6

1.4 本书的组织方式 7

1.4.1 本书所讲述的设计模式的提纲 7

1.4.2 每个模式的讲述结构 9

第2章 简单工厂 11

2.1 场景问题 12

2.1.1 接口回顾 12

2.1.2 面向接口编程 12

2.1.3 不用模式的解决方案 14

2.1.4 有何问题 15

2.2 解决方案 16

2.2.1 使用简单工厂来解决问题 16

2.2.2 简单工厂的结构和说明 16

2.2.3 简单工厂示例代码 17

2.2.4 使用简单工厂重写示例 19

2.3 模式讲解 20

2.3.1 典型疑问 20

2.3.2 认识简单工厂 21

2.3.3 简单工厂中方法的写法 22

2.3.4 可配置的简单工厂 24

2.3.5 简单工厂的优缺点 26

2.3.6 思考简单工厂 27

2.3.7 相关模式 27

第3章 外观模式 29

3.1 场景问题 30

3.1.1 生活中的示例 30

3.1.2 代码生成的应用 31

3.1.3 不用模式的解决方案 31

3.1.4 有何问题 35

3.2 解决方案 35

3.2.1 使用外观模式来解决问题 35

3.2.2 外观模式的结构和说明 36

3.2.3 外观模式示例代码 36

3.2.4 使用外观模式重写示例 39

3.3 模式讲解 40

3.3.1 认识外观模式 40

3.3.2 外观模式的实现 41

3.3.3 外观模式的优缺点 44

3.3.4 思考外观模式 44

3.3.5 相关模式 45

第4章 适配器模式(Adapter) 47

4.1 场景问题 48

4.1.1 装配电脑的例子 48

4.1.2 同时支持数据库和文件的日志管理 49

4.1.3 有何问题 54

4.2 解决方案 55

4.2.1 使适配器模式来解决问题 55

4.2.2 适配器模式的结构和说明 55

4.2.3 适配器模式示例代码 56

4.2.4 使用适配器模式来实现示例 58

4.3 模式讲解 61

4.3.1 认识适配器模式 61

4.3.2 适配器模式的实现 62

4.3.3 双向适配器 62

4.3.4 对象适配器和类适配器 66

4.3.5 适配器模式的优缺点 69

4.3.6 思考适配器模式 70

4.3.7 相关模式 70

第5章 单例模式(Singleton) 73

5.1 场景问题 74

5.1.1 读取配置文件的内容 74

5.1.2 不用模式的解决方案 74

5.1.3 有何问题 76

5.2 解决方案 76

5.2.1 使用单例模式来解决问题 76

5.2.2 单例模式的结构和说明 77

5.2.3 单例模式示例代码 77

5.2.4 使用单例模式重写示例 80

5.3 模式讲解 82

5.3.1 认识单例模式 82

5.3.2 懒汉式和饿汉式实现 83

5.3.3 延迟加载的思想 86

5.3.4 缓存的思想 87

5.3.5 Java中缓存的基本实现 88

5.3.6 利用缓存来实现单例模式 89

5.3.7 单例模式的优缺点 90

5.3.8 在Java中一种更好的单例实现方式 93

5.3.9 单例和枚举 94

5.3.10 思考单例模式 95

5.3.11 相关模式 97

第6章 工厂方法模式(Factory Method) 99

6.1 场景问题 100

6.1.1 导出数据的应用框架 100

6.1.2 框架的基础知识 100

6.1.3 有何问题 102

6.2 解决方案 103

6.2.1 使用工厂方法模式来解决问题 103

6.2.2 工厂方法模式的结构和说明 104

6.2.3 工厂方法模式示例代码 104

6.2.4 使用工厂方法模式来实现示例 105

6.3 模式讲解 108

6.3.1 认识工厂方法模式 108

6.3.2 工厂方法模式与IoC/DI 112

6.3.3 平行的类层次结构 115

6.3.4 参数化工厂方法 117

6.3.5 工厂方法模式的优缺点 120

6.3.6 思考工厂方法模式 121

6.3.7 相关模式 123

第7章 抽象工厂模式(Abstract Factory) 125

7.1 场景问题 126

7.1.1 选择组装电脑的配件 126

7.1.2 不用模式的解决方案 126

7.1.3 有何问题 132

7.2 解决方案 132

7.2.1 使用抽象工厂模式来解决问题 132

7.2.2 抽象工厂模式的结构和说明 133

7.2.3 抽象工厂模式示例代码 134

7.2.4 使用抽象工厂模式重写示例 136

7.3 模式讲解 140

7.3.1 认识抽象工厂模式 140

7.3.2 定义可扩展的工厂 141

7.3.3 抽象工厂模式和DAO 146

7.3.4 抽象工厂模式的优缺点 151

7.3.5 思考抽象工厂模式 151

7.3.6 相关模式 152

第8章 生成器模式(Builder) 153

8.1 场景问题 154

8.1.1 继续导出数据的应用框架 154

8.1.2 不用模式的解决方案 154

8.1.3 有何问题 161

8.2 解决方案 161

8.2.1 使用生成器模式来解决问题 161

8.2.2 生成器模式的结构和说明 162

8.2.3 生成器模式示例代码 162

8.2.4 使用生成器模式重写示例 164

8.3 模式讲解 170

8.3.1 认识生成器模式 170

8.3.2 生成器模式的实现 171

8.3.3 使用生成器模式构建复杂对象 172

8.3.4 生成器模式的优点 182

8.3.5 思考生成器模式 182

8.3.6 相关模式 183

第9章 原型模式(Prototype) 185

9.1 场景问题 186

9.1.1 订单处理系统 186

9.1.2 不用模式的解决方案 186

9.1.3 有何问题 192

9.2 解决方案 193

9.2.1 使用原型模式来解决问题 193

9.2.2 原型模式的结构和说明 194

9.2.3 原型模式示例代码 194

9.2.4 使用原型模式重写示例 196

9.3 模式讲解 200

9.3.1 认识原型模式 200

9.3.2 Java中的克隆方法 202

9.3.3 浅度克隆和深度克隆 204

9.3.4 原型管理器 211

9.3.5 原型模式的优缺点 214

9.3.6 思考原型模式 215

9.3.7 相关模式 215

第10章 中介者模式(Mediator) 217

10.1 场景问题 218

10.1.1 如果没有主板 218

10.1.2 有何问题 218

10.1.3 使用电脑来看电影 219

10.2 解决方案 219

10.2.1 使用中介者模式来解决问题 219

10.2.2 中介者模式的结构和说明 220

10.2.3 中介者模式示例代码 220

10.2.4 使用中介者模式来实现示例 223

10.3 模式讲解 230

10.3.1 认识中介者模式 230

10.3.2 广义中介者 232

10.3.3 中介者模式的优缺点 242

10.3.4 思考中介者模式 243

10.3.5 相关模式 243

第11章 代理模式(Proxy) 245

11.1 场景问题 246

11.1.1 访问多条数据 246

11.1.2 不用模式的解决方案 246

11.1.3 有何问题 250

11.2 解决方案 250

11.2.1 使用代理模式来解决问题 250

11.2.2 代理模式的结构和说明 251

11.2.3 代理模式示例代码 252

11.2.4 使用代理模式重写示例 253

11.3 模式讲解 259

11.3.1 认识代理模式 259

11.3.2 保护代理 261

11.3.3 Java中的代理 266

11.3.4 代理模式的特点 269

11.3.5 思考代理模式 269

11.3.6 相关模式 272

第12章 观察者模式(Observer) 273

12.1 场景问题 274

12.1.1 订阅报纸的过程 274

12.1.2 订阅报纸的问题 274

12.2 解决方案 275

12.2.1 使用观察者模式来解决问题 275

12.2.2 观察者模式的结构和说明 276

12.2.3 观察者模式示例代码 277

12.2.4 使用观察者模式实现示例 279

12.3 模式讲解 283

12.3.1 认识观察者模式 283

12.3.2 推模型和拉模型 285

12.3.3 Java中的观察者模式 289

12.3.4 观察者模式的优缺点 292

12.3.5 思考观察者模式 293

12.3.6 Swing 中的观察者模式 293

12.3.7 简单变形示例——区别对待观察者 294

12.3.8 相关模式 299

第13章 命令模式(Command) 301

13.1 场景问题 302

13.1.1 如何开机 302

13.1.2 与我何干 302

13.1.3 有何问题 302

13.2 解决方案 303

13.2.1 使用命令模式来解决问题 303

13.2.2 命令模式的结构和说明 304

13.2.3 命令模式示例代码 304

13.2.4 使用命令模式来实现示例 307

13.3 模式讲解 312

13.3.1 认识命令模式 312

13.3.2 参数化配置 313

13.3.3 可撤销的操作 317

13.3.4 宏命令 327

13.3.5 队列请求 333

13.3.6 日志请求 341

13.3.7 命令模式的优点 346

13.3.8 思考命令模式 347

13.3.9 退化的命令模式 347

13.3.10 相关模式 351

第14章 迭代器模式(Iterator) 353

14.1 场景问题 354

14.1.1 工资表数据的整合 354

14.1.2 有何问题 354

14.2 解决方案 354

14.2.1 使用迭代器模式来解决问题 354

14.2.2 迭代器模式的结构和说明 355

14.2.3 迭代器模式示例代码 355

14.2.4 使用迭代器模式来实现示例 359

14.3 模式讲解 368

14.3.1 认识迭代器模式 368

14.3.2 使用Java的迭代器 370

14.3.3 带迭代策略的迭代器 373

14.3.4 双向迭代器 376

14.3.5 迭代器模式的优点 379

14.3.6 思考迭代器模式 380

14.3.7 翻页迭代 381

14.3.8 相关模式 389

第15章 组合模式(Composite) 391

15.1 场景问题 392

15.1.1 商品类别树 392

15.1.2 不用模式的解决方案 392

15.1.3 有何问题 395

15.2 解决方案 396

15.2.1 使用组合模式来解决问题 396

15.2.2 组合模式的结构和说明 396

15.2.3 组合模式示例代码 397

15.2.4 使用组合模式重写示例 400

15.3 模式讲解 405

15.3.1 认识组合模式 405

15.3.2 安全性和透明性 407

15.3.3 父组件引用 409

15.3.4 环状引用 414

15.3.5 组合模式的优缺点 418

15.3.6 思考组合模式 419

15.3.7 相关模式 419

第16章 模板方法模式(Template Method) 421

16.1 场景问题 422

16.1.1 登录控制 422

16.1.2 不用模式的解决方案 422

16.1.3 有何问题 428

16.2 解决方案 428

16.2.1 使用模板方法模式来解决问题 428

16.2.2 模板方法模式的结构和说明 429

16.2.3 模板方法模式示例代码 429

16.2.4 使用模板方法模式重写示例 430

16.3 模式讲解 434

16.3.1 认识模板方法模式 434

16.3.2 模板的写法 438

16.3.3 Java回调与模板方法模式 441

16.3.4 典型应用:排序 445

16.3.5 实现通用的增删改查 449

16.3.6 模板方法模式的优缺点 463

16.3.7 思考模板方法模式 463

16.3.8 相关模式 464

第17章 策略模式(Strategy) 465

17.1 场景问题 466

17.1.1 报价管理 466

17.1.2 不用模式的解决方案 466

17.1.3 有何问题 467

17.2 解决方案 469

17.2.1 使用策略模式来解决问题 469

17.2.2 策略模式的结构和说明 470

17.2.3 策略模式示例代码 470

17.2.4 使用策略模式重写示例 472

17.3 模式讲解 475

17.3.1 认识策略模式 475

17.3.2 Context和Strategy的关系 477

17.3.3 容错恢复机制 484

17.3.4 策略模式结合模板方法模式 487

17.3.5 策略模式的优缺点 490

17.3.6 思考策略模式 492

17.3.7 相关模式 493

第18章 状态模式(State) 495

18.1 场景问题 496

18.1.1 实现在线投票 496

18.1.2 不用模式的解决方案 496

18.1.3 有何问题 498

18.2 解决方案 498

18.2.1 使用状态模式来解决问题 498

18.2.2 状态模式的结构和说明 499

18.2.3 状态模式示例代码 499

18.2.4 使用状态模式重写示例 501

18.3 模式讲解 505

18.3.1 认识状态模式 505

18.3.2 状态的维护和转换控制 509

18.3.3 使用数据库来维护状态 514

18.3.4 模拟工作流 516

18.3.5 状态模式的优缺点 527

18.3.6 思考状态模式 527

18.3.7 相关模式 528

第19章 备忘录模式(Memento) 529

19.1 场景问题 530

19.1.1 开发仿真系统 530

19.1.2 不用模式的解决方案 530

19.1.3 有何问题 533

19.2 解决方案 533

19.2.1 使用备忘录模式来解决问题 533

19.2.2 备忘录模式的结构和说明 534

19.2.3 备忘录模式示例代码 535

19.2.4 使用备忘录模式重写示例 537

19.3 模式讲解 541

19.3.1 认识备忘录模式 541

19.3.2 结合原型模式 544

19.3.3 离线存储 546

19.3.4 再次实现可撤销操作 549

19.3.5 备忘录模式的优缺点 558

19.3.6 思考备忘录模式 558

19.3.7 相关模式 559

第20章 享元模式(Flyweight) 561

20.1 场景问题 562

20.1.1 加入权限控制 562

20.1.2 不使用模式的解决方案 563

20.1.3 有何问题 568

20.2 解决方案 569

20.2.1 使用享元模式来解决问题 569

20.2.2 享元模式的结构和说明 570

20.2.3 享元模式示例代码 570

20.2.4 使用享元模式重写示例 573

20.3 模式讲解 578

20.3.1 认识享元模式 578

20.3.2 不需要共享的享元实现 580

20.3.3 对享元对象的管理 587

20.3.4 享元模式的优缺点 596

20.3.5 思考享元模式 597

20.3.6 相关模式 597

第21章 解释器模式(Interpreter) 599

21.1 场景问题 600

21.1.1 读取配置文件 600

21.1.2 不用模式的解决方案 600

21.1.3 有何问题 602

21.2 解决方案 604

21.2.1 使用解释器模式来解决问题 604

21.2.2 解释器模式的结构和说明 605

21.2.3 解释器模式示例代码 605

21.2.4 使用解释器模式重写示例 607

21.3 模式讲解 615

21.3.1 认识解释器模式 615

21.3.2 读取多个元素或属性的值 617

21.3.3 解析器 625

21.3.4 解释器模式的优缺点 633

21.3.5 思考解释器模式 633

21.3.6 相关模式 634

第22章 装饰模式(Decorator) 635

22.1 场景问题 636

22.1.1 复杂的奖金计算 636

22.1.2 简化后的奖金计算体系 636

22.1.3 不用模式的解决方案 636

22.1.4 有何问题 639

22.2 解决方案 640

22.2.1 使用装饰模式来解决问题 640

22.2.2 装饰模式的结构和说明 641

22.2.3 装饰模式示例代码 642

22.2.4 使用装饰模式重写示例 644

22.3 模式讲解 650

22.3.1 认识装饰模式 650

22.3.2 Java中的装饰模式应用 653

22.3.3 装饰模式和AOP 657

22.3.4 装饰模式的优缺点 664

22.3.5 思考装饰模式 664

22.3.6 相关模式 665

第23章 职责链模式(Chain of Responsibility) 667

23.1 场景问题 668

23.1.1 申请聚餐费用 668

23.1.2 不用模式的解决方案 668

23.1.3 有何问题 671

23.2 解决方案 671

23.2.1 使用职责链模式来解决问题 671

23.2.2 职责链模式的结构和说明 672

23.2.3 职责链模式示例代码 673

23.2.4 使用职责链模式重写示例 674

23.3 模式讲解 679

23.3.1 认识职责链模式 679

23.3.2 处理多种请求 680

23.3.3 功能链 691

23.3.4 职责链模式的优缺点 697

23.3.5 思考职责链模式 697

23.3.6 相关模式 698

第24章 桥接模式(Bridge) 701

24.1 场景问题 702

24.1.1 发送提示消息 702

24.1.2 不用模式的解决方案 702

24.1.3 有何问题 705

24.2 解决方案 707

24.2.1 使用桥接模式来解决问题 707

24.2.2 桥接模式的结构和说明 708

24.2.3 桥接模式示例代码 709

24.2.4 使用桥接模式重写示例 710

24.3 模式讲解 715

24.3.1 认识桥接模式 715

24.3.2 谁来桥接 718

24.3.3 典型例子——JDBC 721

24.3.4 广义桥接——Java中无处不桥接 723

24.3.5 桥接模式的优点 726

24.3.6 思考桥接模式 727

24.3.7 相关模式 728

第25章 访问者模式(Visitor) 731

25.1 场景问题 732

25.1.1 扩展客户管理的功能 732

25.1.2 不用模式的解决方案 734

25.1.3 有何问题 738

25.2 解决方案 739

25.2.1 使用访问者模式来解决问题 739

25.2.2 访问者模式的结构和说明 739

25.2.3 访问者模式示例代码 740

25.2.4 使用访问者模式重写示例 744

25.3 模式讲解 749

25.3.1 认识访问者模式 749

25.3.2 操作组合对象结构 751

25.3.3 谁负责遍历所有元素对象 758

25.3.4 访问者模式的优缺点 761

25.3.5 思考访问者模式 761

25.3.6 相关模式 762

附录A 常见面向对象设计原则 763

A.1 设计模式和设计原则 764

A.1.1 设计模式和设计原则的关系 764

A.1.2 为何不重点讲解设计原则 764

A.2 常见的面向对象设计原则 765

A.2.1 单一职责原则SRP(Single Responsibility Principle) 765

A.2.2 开放-关闭原则OCP(Open-Closed Principle) 765

A.2.3 里氏替换原则LSP(Liskov Substitution Principle) 765

A.2.4 依赖倒置原则DIP(Dependence Inversion Principle) 766

A.2.5 接口隔离原则ISP(Interface Segregation Principle) 766

A.2.6 最少知识原则LKP(Least Knowledge Principle) 767

A.2.7 其他原则 767

附录B UML简介 769

B.1 UML基础 770

B.1.1 UML是什么 770

B.1.2 UML历史 770

B.1.3 UML能干什么 771

B.1.4 UML有什么 771

B.2 类图 772

B.2.1 类图的概念 772

B.2.2 类图的基本表达 772

B.2.3 抽象类和接口 773

B.2.4 关系 774

B.3 顺序图 778

B.3.1 顺序图的概念 778

B.3.2 顺序图的基本表达 779

临别赠言 782

不是结束而是新的开始 782

你该怎么做 782

参考文献 783