目录
第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 思考简单工厂 26 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 有何问题 103 6.2
解决方案 103 6.2.1 使用工厂方法模式来 解决问题 103 6.2.2
工厂方法模式的结构 和说明 104 6.2.3 工厂方法模式示例 代码 104 6.2.4
使用工厂方法模式来 实现示例 106 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 145 7.3.4
抽象工厂模式的 优缺点 150 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 有何问题 160 8.2 解决方案 161 8.2.1
使用生成器模式来 解决问题 161 8.2.2 生成器模式的结构 和说明 162 8.2.3
生成器模式示例代码 162 8.2.4 使用生成器模式重写 示例 164 8.3 模式讲解 169 8.3.1
认识生成器模式 169 8.3.2 生成器模式的实现 171 8.3.3 使用生成器模式构建 复杂对象 172 8.3.4
生成器模式的优点 181 8.3.5 思考生成器模式 182 8.3.6 相关模式 182 第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
广义中介者 231 10.3.3 中介者模式的优缺点 242 10.3.4 思考中介者模式 242 10.3.5
相关模式 243 第11章 代 理 模 式(Proxy) 245 11.1 场景问题 246 11.1.1
访问多条数据 246 11.1.2 不用模式的解决 方案 246 11.1.3 有何问题 250 11.2
解决方案 251 11.2.1 使用代理模式来解决 问题 251 11.2.2 代理模式的结构和 说明 251 11.2.3
代理模式示例代码 252 11.2.4 使用代理模式重写 示例 253 11.3 模式讲解 260 11.3.1
认识代理模式 260 11.3.2 保护代理 262 11.3.3 Java中的代理 267 11.3.4
代理模式的特点 269 11.3.5 思考代理模式 270 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
思考观察者模式 292 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 可撤销的操作 318 13.3.4
宏命令 327 13.3.5 队列请求 333 13.3.6 日志请求 342 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的迭代器 371 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 父组件引用 410 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
备忘录模式示例 代码 534 19.2.4 使用备忘录模式重写 示例 536 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
装饰模式的优缺点 663 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 思考职责链模式 698 23.3.6 相关模式 699 第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
桥接模式示例代码 708 24.2.4 使用桥接模式重写 示例 710 24.3 模式讲解 715 24.3.1
认识桥接模式 715 24.3.2 谁来桥接 717 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
访问者模式的 优缺点 760 25.3.5 思考访问者模式 761 25.3.6 相关模式 761 附录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
顺序图 779 B.3.1 顺序图的概念 779 B.3.2 顺序图的基本表达 779 临别 赠
言 783 不是结束而是新的开始 783 你该怎么做 783 参考文献 784
|