第1章 设计模式初见 1
1.1 一切从某个小超市开始 1
1.2 为何使用设计模式 1
1.3 设计模式分类 2
1.4 阅读建议与学习资源 3
第2章 面向对象设计原则 4
2.1 软件的维护代价 4
2.2 面向对象设计原则 4
2.2.1 基础原则:“开一闭”原则(OCP) 4
2.2.2 单一职责原则(SRP) 7
2.2.3 里氏替换原则(LSP) 10
2.2.4 依赖倒置原则(DIP) 12
2.2.5 接口隔离原则(ISP) 13
2.3 Java面向对象的支持 14
第3章 统一建模语言UML概述 15
3.1 UML发展史 15
3.2 UML中的关系 17
3.2.1 依赖关系 17
3.2.2 继承关系 17
3.2.3 实现关系 17
3.2.4 关联关系 18
3.2.5 聚合关系 18
3.2.6 组合关系 18
3.3 UML中的图形类型 19
3.4 UML工具软件 19
第4章 工厂方法模式(FactoryMethod) 21
4.1 商品上架遇到的问题 21
4.2 工厂方法模式的结构 24
4.2.1 简单工厂模式 24
4.2.2 工厂方法模式 29
4.2.3 使用工厂方法模式解决商品上架问题 33
4.2.4 工厂模式在JDK中的实例 42
4.2.5 工厂方法模式的使用范围 44
4.2.6 简单工厂与其他模式的区别 44
4.3 工厂方法模式总结 44
第5章 抽象工厂模式(Abstract Factory) 45
5.1 深入探讨商品上架遇到的问题 46
5.2 抽象工厂模式的结构 51
5.2.1 抽象工厂模式 51
5.2.2 使用抽象工厂模式解决商品上架问题 58
5.2.3 抽象工厂模式在JDK中的实例 66
5.2.4 抽象工厂模式的使用范围 71
5.2.5 与其他模式的关系 71
5.3 抽象工厂模式总结 72
第6章 建造者模式(Builder Factory) 73
6.1 商品捆绑销售的问题 73
6.2 建造者模式的结构 76
6.2.1 建造者模式 76
6.2.2 使用建造者模式解决捆绑销售问题 83
6.2.3 建造者模式的实际使用案例 92
6.2.4 建造者模式的使用范围 92
6.2.5 与其他模式的关系 93
6.3 建造者模式总结 93
第7章 原型模式(Prototype) 94
7.1 新连锁店开张 94
7.2 原型模式的结构 97
7.2.1 原型模式 97
7.2.2 浅克隆与深克隆 102
7.2.3 使用原型模式解决连锁店问题 109
7.2.4 原型模式在JDK中的应用实例 116
7.2.5 原型模式的使用范围 116
7.2.6 与其他模式的关系 117
7.3 原型模式总结 117
第8章 单例模式(Singleton) 118
8.1 连锁店总店的唯一性问题 118
8.2 单例模式的结构 120
8.2.1 单例模式 120
8.2.2 多线程情况下的单例模式 122
8.2.3 单例模式的双重检查模式DCL 126
8.2.4 使用单例模式解决连锁店总店的问题 129
8.2.5 单例模式在JDK中的实例 137
8.2.6 单例模式的使用范围 140
8.2.7 与其他模式的关系 140
8.3 单例模式总结 141
第9章 适配器模式(Adapter) 142
9.1 家电区的麻烦 142
9.2 适配器的结构 143
9.2.1 类适配器 143
9.2.2 对象适配器 144
9.2.3 两种适配器的对比 145
9.2.4 用适配器模式解决电源插头问题 146
9.2.5 双向适配器 149
9.2.6 适配器模式在JDK中的实例 150
9.2.7 适配器的适用范围 155
9.2.8 与其他模式的关系 155
9.3 适配器模式总结 156
第10章 桥接模式(Bridge) 157
10.1 游戏机销售专柜引发的思考 157
10.2 桥接模式的结构 158
10.2.1 桥接模式 158
10.2.2 使用桥接模式解决游戏机销售的问题 163
10.2.3 桥接模式在JDK中的实例 168
10.2.4 桥接模式的使用范围 171
10.2.5 与其他模式的关系 171
10.3 桥接模式总结 171
第12章 代理模式(Proxy) 172
11.1 手机柜台遇到的问题 172
11.2 代理模式的结构 173
11.2.1 代理模式 173
11.2.2 使用代理模式解决手机展示过程中的问题 177
11.2.3 几种不同的代理模式 186
11.2.4 代理模式的使用范围 192
11.2.5 与其他模式的关系 193
11.3 代理模式总结 193
第12章 外观模式(Facade) 194
12.1 顾客的意见——购买大件商品时手续繁多 194
12.2 外观模式的结构 195
12.2.1 外观模式 195
12.2.2 使用外观模式解决顾客的一站式服务 201
12.2.3 外观模式在JDK中的实例 206
12.2.4 外观模式的使用范围及优点 209
12.2.5 与其他模式的关系 210
12.3 外观模式总结 210
第13章 装饰模式(Decorator) 212
13.1 如何解决销售人员的能力固化问题 212
13.2 装饰模式的结构 213
13.2.1 装饰模式 213
13.2.2 使用装饰模式解决销售人员问题 217
13.2.3 装饰模式在JDK中的实例 223
13.2.4 装饰模式的使用范围 224
13.2.5 与其他模式的关系 225
13.3 装饰模式总结 226
第14章 组合模式(Composite) 227
14.1 如何描述超市的组织结构 227
14.2 组合模式的结构 229
14.2.1 组合模式 229
14.2.2 使用桥接模式解决超市组织结构问题 236
14.2.3 组合模式在JDK中的实例 244
14.2.4 组合模式的使用范围 248
14.2.5 与其他模式的关系 248
14.3 组合模式总结 248
第15章 享元模式(Flyweight) 249
15.1 宣传海报设计过程中的思考 249
15.2 享元模式的结构 250
15.2.1 单纯享元模式 250
15.2.2 复合享元模式 255
15.2.3 使用享元模式解决宣传海报的设计问题 260
15.2.4 享元模式在JDK中的实例 272
15.2.5 享元模式的使用范围 274
15.2.6 与其他模式的关系 274
15.3 享元模式总结 275
第16章 命令模式(Command) 276
16.1 连锁店客服专线的问题 276
16.2 命令模式的结构 279
16.2.1 命令模式 279
16.2.2 使用命令模式解决客服电话的问题 289
16.2.3 命令模式在JDK中的实例 297
16.2.4 命令模式的使用范围 298
16.2.5 与其他模式的关系 299
16.3 命令模式总结 299
第17章 观察者模式(Observer) 300
17.1 连锁店宣传资料的发放问题 300
17.2 观察者模式的结构 304
17.2.1 观察者模式 305
17.2.2 使用观察者模式构建发布/订阅模型 309
17.2.3 观察者模式在JDK中的实例 316
17.2.4 观察者模式的使用范围 321
17.2.5 与其他模式的关系 322
17.3 观察者模式总结 323
第18章 责任链模式(Chain of Responsibility) 324
18.1 商品进货审批中的问题 324
18.2 责任链模式的结构 328
18.2.1 责任链模式 328
18.2.2 纯的和不纯的责任链模式 332
18.2.3 用责任链模式建立明晰的进货审批流程 332
18.2.4 责任链模式在JDK中的实例 338
18.2.5 责任链模式的使用范围 342
18.2.6 与其他模式的关系 343
18.3 责任链模式总结 343
第19章 迭代器模式(Iterator) 344
19.1 收银员的商品处理效率亟待提高 344
19.2 迭代器模式的结构 350
19.2.1 迭代器模式 350
19.2.2 用迭代器模式统一处理各类商品 354
19.2.3 迭代器模式在JDK中的实例 362
19.2.4 迭代器模式的使用范围及优点 365
19.2.5 与其他模式的关系 365
19.3 外观模式总结 365
第20章 访问者模式(Visitor) 366
20.1 再谈收银员的效率问题 366
20.2 访问者模式的结构 369
20.2.1 静态、动态、单分派、多分派、双重分派 369
20.2.2 访问者模式 374
20.2.3 用访问者模式设计灵活高效的收银程序 381
20.2.4 访问者模式在JDK中的实例 387
20.2.5 访问者模式的使用范围及优点 388
20.2.6 与其他模式的关系 389
20.3 访问者模式总结 389
第21章 状态模式(State) 390
21.1 如何调整超市的运营状态 390
21.2 状态模式的结构 393
21.2.1 状态模式 393
21.2.2 用状态模式设计超市在不同时段的打折状态 403
21.2.3 状态模式的使用范围及优点 408
21.2.4 与其他模式的关系 408
21.3 状态模式总结 408
第22章 备忘录模式(Memento) 409
22.1 服务器硬盘坏了,营业数据全丢了 409
22.2 备忘录模式的结构 411
22.2.1 备忘录模式白箱实现 412
22.2.2 备忘录模式黑箱实现 415
22.2.3 用备忘录模式设计可靠的数据保存系统 421
22.2.4 备忘录模式在JDK中的实例 431
22.2.5 备忘录模式的特点 432
22.2.6 与其他模式的关系 433
22.3 备忘录模式总结 433
第23章 策略模式(Strategy) 434
23.1 最常用的促销手段——打折 434
23.2 策略模式的结构 437
23.2.1 策略模式 437
23.2.2 用策略模式构建灵活的打折方式 447
23.2.3 策略模式在JDK中的实例 459
23.2.4 策略模式的使用范围及优点 460
23.2.5 与其他模式的关系 461
23.3 策略模式总结 461
第24章 调停者模式(Mediator) 462
24.1 超市经营的核心——库存管理 462
24.2 调停者模式的结构 469
24.2.1 调停者模式 469
24.2.2 用调停者模式协调进货/销售/盘点之间的关系 475
24.2.3 调停者模式在JDK中的实例 481
24.2.4 调停者模式的适用范围及优缺点 482
24.2.5 与其他模式的关系 482
24.3 调停者模式总结 482
第25章 模板方法模式(Template Method) 483
25.1 超市面包房的糕点制作流程规范化问题 483
25.2 模板方法模式的结构 487
25.2.1 模板方法模式 487
25.2.2 用模板方法模式设计不同糕点的制作流程 491
25.2.3 模板方法模式在JDK中的实例 497
25.2.4 模板方法模式的使用范围及优点 499
25.2.5 与其他模式的关系 500
25.3 模板方法模式总结 500
第26章 解释器模式(Interpreter) 501
26.1 新店开在了外国人聚居区 501
26.2 解释器模式的结构 504
26.2.1 解释器模式 504
26.2.2 用解释器模式设计超市内的多语言指示牌 510
26.2.3 解释器模式在JDK中的实例 516
26.2.4 解释器模式的使用范围及优点 517
26.2.5 与其他模式的关系 517
26.3 解释器模式总结 518
第27章 设计模式总结 519
27.1 回顾设计模式在超市发展中的足迹 519
27.2 各模式之间的关系及演变图 521
27.3 新的知识新的起点 522
27.3.1 Java EE设计模式 522
27.3.2 架构风格模式 523
27.3.3 架构模式 523
27.3.4 分层架构模式 524
27.4 学习建议 524