第1篇 设计模式基础 1
第1章 欲速则不达:了解设计模式 1
1.1 小巩的疑惑 1
1.2 从历史开始 3
1.3 设计模式的分类 4
1.4 如何学习设计模式 5
1.5 本书的学习线路图 6
1.6 学习设计模式的资源 6
第2章 磨刀不误砍柴工:UML语言概述 7
2.1 UML语言的历史 7
2.2 UML语言简介 7
2.3 使用ROSE工具 12
2.4 使用Togther 16
2.5 使用Visio 21
第2篇 创建型模式详解 23
第3章 术业有专攻:简单工厂模式(Simple Factory) 23
3.1 先谈创建模式的分类 23
3.2 从动物园说起 24
3.3 简单工厂模式简介 27
3.4 简单工厂模式的实际应用 28
3.5 简单工厂模式的优缺点 29
第4章 精益求精:工厂方法模式(Factory Method) 30
4.1 为什么要使用工厂方法模式 30
4.2 再谈动物园管理系统的设计 31
4.3 工厂方法模式简介 34
4.4 回顾简单工厂模式下的薪资程序设计 36
4.5 用工厂方法模式实现薪资程序的设计 37
4.6 工厂方法模式的优缺点 38
第5章 再接再厉:抽象工厂模式(Abstract Factory) 39
5.1 为什么要使用抽象工厂模式 39
5.2 再谈动物园管理系统的设计 40
5.3 抽象工厂模式简介 45
5.4 回顾工厂方法模式下的薪资程序设计 47
5.5 用抽象工厂模式实现薪资程序的设计 48
5.6 抽象工厂模式的优缺点 51
第6章 孜孜不倦:创建者模式(Builder) 52
6.1 为什么要使用创建者模式 52
6.2 从摩托车的组装谈起 53
6.3 创建者模式简介 57
6.4 回顾抽象工厂模式下的薪资程序设计 58
6.5 用创建者模式实现薪资程序的设计 60
6.6 创建者模式的优缺点 60
第7章 照猫画虎:原型模式(Prototype) 61
7.1 为什么要使用原型模式 61
7.2 从配钥匙谈起 61
7.3 原型模式的简介 63
7.4 Java中原型模式的实际应用 64
7.5 原型模式的优缺点 68
第8章 独一无二:单例模式(Singleton) 69
8.1 为什么要使用单例模式 69
8.2 从系统日志的记录谈起 69
8.3 单例模式简介 73
8.4 单例模式在Log4j中的应用 74
8.5 单例模式的优缺点 78
第3篇 结构型模式详解 79
第9章 一目了然:外观模式(Facade) 79
9.1 从系统间的衔接谈起 79
9.2 外观模式简介 79
9.3 用外观模式实现持久层框架的设计 81
9.4 外观模式的优缺点 104
第10章 改头换面:适配器模式(Adapter) 105
10.1 为什么要使用适配器模式 105
10.2 再谈系统间的衔接 105
10.3 适配器模式简介 107
10.4 适配器模式在Spring中的实际应用 108
10.5 适配器模式在Java的I/O中的实际应用 112
10.6 适配器模式的优缺点 117
第11章 越俎代庖:代理模式(Proxy) 118
11.1 为什么要使用代理模式 118
11.2 从如何记录系统日志谈起 118
11.3 代理模式简介 121
11.4 代理模式在Spring的AOP中的实际应用 122
11.5 代理模式在Hibernate的延迟加载中的实际应用 130
11.6 代理模式的优缺点 148
11.7 小结 148
第12章 真人不露相:装饰模式(Decorator) 149
12.1 为什么要使用装饰模式—从手机彩铃谈起 149
12.2 装饰模式简介 153
12.3 装饰模式在Java的I/O中的实际应用 155
12.4 装饰模式在JUnit中的实际应用 167
12.5 装饰模式的优缺点 170
12.6 小结 170
第13章 游刃有余:桥模式(Bridge) 171
13.1 为什么要使用桥模式 171
13.2 从汽车制造谈起 173
13.3 桥模式简介 177
13.4 JDBC中桥模式的实际应用 178
13.5 桥模式的优缺点 196
13.6 小结 196
第14章 如法炮制:组合模式(Composite) 197
14.1 为什么要使用组合模式 197
14.2 从企业组织机构的设计谈起 198
14.3 组合模式简介 201
14.4 组合模式在算术运算中的实际应用 202
14.5 组合模式在JUnit中的实际应用 205
14.6 组合模式的优缺点 213
14.7 小结 214
第15 章源源不断:享元模式(Flyweight) 215
15.1 为什么要使用享元模式—从文字编辑器谈起 215
15.2 享元模式简介 220
15.3 用享元模式实现数据库连接池的设计 221
15.4 享元模式的优缺点 227
15.5 小结 227
第4篇 行为型模式详解 229
第16章 按部就班:模板方法模式(Template Method) 229
16.1 为什么要使用模板方法模式 229
16.2 再谈薪资程序的设计 232
16.3 模板方法模式简介 234
16.4 模板方法模式在Spring的Jdbc Template中的实际应用 235
16.5 模板方法模式在Spring的Hibernate Template中的实际应用 249
16.6 模板方法模式的优缺点 264
16.7 小结 264
第17章 风吹草动:观察者模式(Observer) 265
17.1 为什么要使用观察者模式 265
17.2 从股票系统的设计谈起 267
17.3 观察者模式简介 270
17.4 观察者模式在Java中的实际应用. 272
17.5 观察者模式在JUnit中的实际应用 275
17.6 观察者模式的优缺点 281
17.7 小结 281
第18章 变化多端:状态模式(State) 282
18.1 为什么要使用状态模式 282
18.2 从公文系统的设计谈起 283
18.3 状态模式简介 286
18.4 使用状态模式来实现QQ的状态 287
18.5 状态模式的优缺点 289
18.6 小结 289
第19章 明修栈道,暗度陈仓:策略模式(Strategy) 290
19.1 为什么要使用策略模式 290
19.2 再谈薪资系统的设计 295
19.3 策略模式简介 299
19.4 策略模式的优缺点 300
19.5 小结 300
第20章 循序渐进:职责链模式(Chain of Responsibility) 301
20.1 为什么要使用职责链模式 301
20.2 从医院看病谈起 302
20.3 职责链模式简介 305
20.4 用职责链模式实现财务借支审批系统 306
20.5 职责链模式的优缺点 309
20.6 小结 310
第21章 独具匠心:命令模式(Command) 311
21.1 为什么要使用命令模式 311
21.2 从观看NBA比赛谈起 313
21.3 命令模式简介 315
21.4 命令模式在MVC框架中的具体应用 317
21.5 命令模式在JUnit中的实际应用 328
21.6 命令模式的优缺点 334
21.7 小结 334
第22章 步调一致:访问者模式(Visitor) 335
22.1 为什么要使用访问者模式 335
22.2 从超市购物谈起 338
22.3 访问者模式简介 342
22.4 访问者模式的优缺点 343
22.5 小结 343
第23章 左右逢源:调停者模式(Mediator) 344
23.1 为什么要使用调停者模式 344
23.2 从MSN聊天谈起 345
23.3 调停者模式简介 348
23.4 调停者模式在交通红绿灯中的具体应用 349
23.5 调停者模式的优缺点 352
23.6 小结 352
第24章 白纸黑字:备忘录模式(Memento) 353
24.1 为什么要使用备忘录模式 353
24.2 从会议纪要谈起 353
24.3 备忘录模式简介 355
24.4 备忘录模式的优缺点 356
24.5 小结 356
第25章 周而复始:迭代器模式(Iterator) 357
25.1 为什么要使用迭代器模式 357
25.2 从Java的迭代器谈起 357
25.3 迭代器模式简介 358
25.4 迭代器模式在Java中的具体应用 360
25.5 迭代器模式的优缺点 382
25.6 小结 382
第26章 望文生义:解释器模式(Interpreter) 383
26.1 从文字翻译谈起 383
26.2 解释器模式简介 385
26.3 解释器模式的优缺点 386
26.4 小结 386
第5篇 设计模式的综合应用 387
第27章 无招胜有招:如何在设计中应用设计模式 387
27.1 面向对象的设计原则 387
27.2 Java中接口和抽象类的区别 389
27.3 综合对比各个设计模式的思想. 394
27.4 不要过度使用设计模式 396
27.5 小结 396