1.模式的简史和形而上学
1.1模式是什么
1.2软件模式的简史
1.3模式的起源
1.4与道家思想的关系
1.5软件的永恒之道
1.6模式的要素
1.7本书讲解模式的格式
2.统一建模语言UML简介
2.1建造世界贸易中心
2.2什么是UML
统一建模语言
可视化功能
说明功能
建造功能
建文档功能
2.3UML包括什么
结构型图
行为型图
2.4类图
显示类、接口及它们之间的静态结构和关系的图
描述类的类图
描述接口的类图
描述对象的类图
类图中的关系
一般化关系
关联关系
常见的基数
聚合关系
合成关系
依赖关系
2.5时序图
在ATM机上查阅账户信息
垂直的叫生命线
2.6状态图
定义一个具有有限个内部状态的机器
2.7UML及建模的工具
第3章 软件的可维护性与可复用性
3.1软件系统的可维护性
一个可维护性较好的系统,应当允许维护工作能够以容易、准确、安全和阶级的形式进行
导致系统腐烂的原因:过于僵硬、过于脆弱、复用率低、粘度过高
设计目标:可扩展性、灵活性、可插入行
3.2系统的可复用性
第4章 "开-闭"原则(OCP)
4.1什么是开闭原则
模块可以在不被修改的前提下被扩展
4.2怎样做到开闭原则
不修改抽象层而扩展实现层
4.3与其他设计原则的关系
4.4策略模式对开闭原则的支持
4.5在其他设计模式中的体现
简单工厂模式、工厂方法模式、抽象工厂模式、建造模式、桥梁模式、门面模式、调停者模式、访问者模式、迭代子模式
4.6一个重构做法的讨论
第5章 java语言的接口
5.1什么是接口
一个接口是一些方法特征的集合
5.2为什么使用接口
接口是对可插入性的保证
5.3java接口常见的用法
单方法接口、标识接口、常量接口、
第6章 抽象类
6.1什么是抽象类
仅提供一个类型的部分实现
6.2抽象类的用途
具体类不是用来继承的、抽象类应当用于尽可能多的共同代码、抽象类应当拥有尽可能少的数据
6.3基于抽象类的模式和原则
针对抽象编程、正确使用继承、模板方法模式
6.4什么时候才应当使用继承复用
区分has-a与is-a、子类扩展超类的责任、不要从工具类继承
第7章 里氏代换原则
7.1美猴王的智慧
7.2什么是里氏代换原则
一个软件使用一个基类,一定适用于其子类
7.3里氏代换原则在设计模式中的体现
策略模式、合成模式、代理模式
7.4从代码重构的角度理解
长方形和正方形、正方形不可以作为长方形的子类、代码的重构、从抽象类继承
第8章 依赖倒转原则
8.1为何而倒转
8.2复用与可维护性的倒转
8.3依赖倒转原则
针对接口编程,不用针对实现编程
8.4怎样做到依赖倒转原则
工厂方法模式、模板方法模式迭代子模式
8.5java对抽象类型的支持
联合使用java接口和java抽象类
8.6依赖倒转原则的优缺点
难以实现,技术要求高
第9章 接口隔离原则
9.1什么是接口隔离原则
不同功能接口按角色分割开来
第10章 合成/聚合复用原则
10.1合成和聚合的区别
10.2复用的基本种类
第11章 迪米特法则
11.1迪米特法则改造
调用转发
11.2迪米特法则与设计模式
11.3迪米特法则的实现
将类设置成不变类、降低类的访问权限、谨慎使用Serializable、降低成员的访问权限
第12章 简单工厂模式
12.1工厂模式的几种形态
工厂模式专门负责将大量有共同接口的类实例化
12.2简单工厂模式的引进
12.3简单工厂模式的结构
12.4简单工厂模式与其他模式的关系
单例模式
自己负责创建自身的实例
多例模式、备忘录模式、MVC模式
12.5简单工厂模式的优点和缺点
12.6简单工厂模式在java中的应用
第13章 工厂方法模式
13.1工厂方法模式的结构
13.2工厂方法模式与其他模式的关系
COM中的工厂方法模式、EJB中的工厂方法模式、JMS中的工厂方法模式
第14章 抽象工厂模式
14.1抽象工厂模式的结构
14.1.1产品的创建
14.1.2系统的设计
14.2使用场景
14.3在农村系统中的实现
14.4相关的模式与模式的实现
第15章 单例模式
15.1引言
15.2单例模式的结构
饿汉式单例类、懒汉式单例类、登记式单例类、
15.3使用场景
在一个系统要求一个类只有一个实例时才应当使用单例模式
15.4单例类的状态
有状态的单例类、没有状态的单例类、多个jvm系统的分散式系统(EJB、RMI、JINI)避免使用
15.5示例:属性管理器
15.6java中的单例模式
Runtime、Introspector、Toolkit
15.7不完全的单例类
有公开构造子的单例模式称为不完全单例类
15.8相关模式
第16章 单例模式与MX记录
16.1问题与解决方案
16.2目录服务与MX记录
16.3JNDI架构介绍
16.4如何使用JNDI编程
16.5系统设计
16.6讨论
第17章 多例模式与多语言支持
17.1引言
17.2多例模式
多例模式的特点、有上限多例类、无上限多例模式、有状态和无状态的多例类
17.3多语言项目的设计
语言代码、地区代码、Locale代码、Resource文件及其命名规范
第18章 序列生成器与单例及多例模式
18.1问题
预定式键值存储办法,一次预定多个键值(键值区间)
18.2将单例模式应用到系统设计中
无数据库方案、有数据库方案、键值缓存方案、有缓存的多序列键生成器
18.3将多例模式应用到系统设计中
18.4讨论
第19章 建造模式
19.1引言
19.2建造模式的结构
抽象建造者角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造
具体建造这角色:创建产品的实例
导演者角色:调用创造者角色创建产品
产品角色
19.3建造模式的活动序列
19.4建造模式的实现
空的零件构造方法、省略抽象建造者角色、省略导演者角色、过渡到模板方法模式、合并建造者角色和产品角色
19.5众神造人的神话故事
19.6JavaMail的建造模式
19.7发送邮件的例子
19.8使用场景
需要生成的产品有复杂的内部结构、需要生成的产品对象的属性相互依赖
第20章 原始模型模式
20.1引言
20.2建立、对象以及对象的引用
20.3java对象的复制
20.4原始模型模式的结构
简单形式
登记形式
20.5模式的实现:深复制和浅复制
20.6孙大圣的身外化身法术
20.7使用场景
产品类需要动态加载
20.8原始模型模式的优缺点
20.9原始模型模式与其他模式的关系
第21章 javaBean的冷藏和解冻
21.1什么是冷藏和解冻
21.2什么可以冷藏
21.3bean.instantiate方法
21.4jsp中使用bean.instantiate方法
21.5与装饰模式的关系
第22章 适配器模式
22.1引言
22.2类的适配器模式的结构
目标角色:目标接口
源角色:需要适配的接口
适配器角色
22.3类的适配器模式的效果
22.4对象的适配器模式的结构
22.5使用场景
系统需要使用现有的类,而此类的接口不符号系统的需要
建立一个可以重复使用的类,用于与一些彼此直接没有太大关联的类
22.6iterator与enumeration
22.7适配器模式在架构层次上的应用
22.8理由适配器模式指方为圆
22.9关于模式实现的讨论
22.10适配器模式与相关模式
第23章 缺省适配模式
23.1鲁智深的故事
23.2window adapter是缺省适配模式
23.3模式的结构
23.4使用场景
不准备实现一个接口的所有方法时,可以制造一个抽象类,给出所有方法的平庸实现。
23.5实现
23.6j2ee中的缺省适配模式
23.7例子
第24章 XMLProperties与适配器模式
24.1引言
24.2SAX2浏览器
24.3开始XMLProperties项目
第25章 合成模式
25.1对象的树结构
由上向下的树图,子节点不知道父节点
由下向上的树图,父节点不知道子节点
双向的树图
25.2介绍合成模式
25.3安全式和透明式的合成模式
抽象构件角色、树叶构件角色、树枝构件角色
25.4安全式的合成模式的结构
25.5透明式的合成模式的结构
25.6合成模式的实现
25.7道士的故事
25.8绘图的例子
25.9AWT中的例子
25.10与其他模式的关系
第26章 装饰模式
26.1引言
26.2装饰模式的结构
抽象构件角色:给出一个抽象接口,接收附加责任的对象
具体构件角色:定义要接收附加责任的类
装饰角色:持有一个构件对象的实例,定义一个与抽象构件接口一致的接口
具体装饰角色:负责给构件对象“贴上”附加的责任
26.3使用场景
扩展类的功能或增加附加责任
26.4孙大圣的故事
26.5装饰模式优缺点
26.6装饰模式实现的讨论
26.7与其他模式的关系
26.8示例:GrepRead
26.9发票系统
第27章 设计模式在I/O库中的应用
27.1引言
27.2I/O库的设计原则
27.3装饰模式的应用
27.4半透明的装饰模式
27.5适配器模式的应用
27.6从byte到char流的适配
第28章 代理模式
28.1引言
28.2代理的种类
远程代理、虚拟代理、复制代理、保护代理、Cache代理、防火墙代理、同步化代理、只能引用代理
28.3代理模式的结构
抽象主题角色:声明真实主题和代理主题共同的接口
代理主题角色:真实主题的引用
真实主题角色:代理角色代表的真实对象
28.4代理模式的时序
28.5Java2.0对代理模式的支持
反射与动态代理
28.6高老庄悟空降八戒
28.7代理模式的优缺点
28.8代理模式的实现
第29章 智能引用代理
29.1问题
29.2系统设计
29.3系统的时序
29.4系统的源代码
28.5与其他模式的关系
第30章 虚拟代理
30.1问题
30.2系统的要求
30.3系统设计
30.4系统的时序
30.5系统的源代码
30.9与其他模式的关系
第31章 享元模式
31.1引用
31.2单纯享元模式的结构
抽象享元角色:具体享元类的超类,为这些类规定出需要实现的公共接口
具体享元角色:实现抽象享元角色锁规定的接口
享元工厂角色:负责创建和管理享元角色
客户端角色:维护一个对所有享元对象的引用
31.3复合享元模式的结构
31.4模式的实现
31.5一个咖啡摊的例子
31.6咖啡屋的例子
31.7使用场景
系统有大量对象,对象消耗大量内存,对象状态大部分可以外部化,可以按内蕴状态分组,对象不可分辨
31.8代码重构看享元模式
31.9享元模式的优缺点
31.10相关模式
第32章 门面模式
32.1引言
32.2结构
门面角色:客户端可以调用这个角色的方法
子系统角色:同时可以有多个子系统
32.3实现
32.4使用场景
32.5迪米特法则
32.6例子
32.7设计
32.8Session
第33章 桥梁模式
33.1引言
33.2结构
抽象画角色、修真抽象画角色、实现化角色、具体实现化角色
33.3Peer架构
33.4驱动器和JDBC驱动器
33.5重构
33.6其他模式
33.7八戒“转世投胎”的故事
33.8实现
33.9使用场景
第34章 不变模式
34.1引言
34.2结构和实现
34.3应用
String类,封装类
34.4优缺点
34.5与其他模式
第35章 策略模式
35.1引言
环境角色:持有一个Strategy类的引用
抽象策略模式
具体策略模式:包装了相关的算法或行为
35.2实现
35.3例子
35.4排序策略系统
35.5图书折扣的计算
35.6使用场景
35.7优缺点
35.8与其他模式的关系
35.9设计原则
35.10这领导锦囊妙计
35.6例子:复数类
第36章 模板方法模式
36.1引言
36.2结构
36.3好莱坞原则
36.4例子
36.5继承作为复用的工具
36.6应用
HttpServerlet、AbstractTableModel
36.7方法
36.8代码重构
36.9重构原则
36.10西天取经的八十一难
第37章 Servlet技术中的模式
37.1Servlet技术介绍
37.2模板方法模式的使用
37.3观察者模式的应用
第38章 观察者模式
38.1引言
38.2结构
38.3实现
38.4应用
38.5菩萨的守瓶龟
38.6DEM事件机制
38.7与其他模式的关系
第39章 观察者模式与AWT中的事件处理
39.1引言
39.2DEM的结构
第40章 观察者模式与SAX2浏览器
40.1引言
40.2SAX2是怎么工作的
40.3ContenHandler接口
40.4实现
40.5使用
40.6缺省适配模式与DefaultHandler
40.7简单工厂模式的应用
第41章 观察者模式与Swing定时器
41.1为什么需要定时器
41.2Utility定时器和Swing定时器的区别
41.3使用Swing定时器的方法
41.4观察者模式的应用
41.5单例模式的应用
第42章 MVC模式与用户输入数据检查
42.1什么是MVC模式
42.2MVC是架构模式
42.3应用
42.4代码重构
42.5用户输入检查与MVC模式
42.6SQL注射
第43章 迭代子模式
43.1引言
43.2结构
43.3实现
43.4优缺点
43.5例子
43.6与其他模式的关系
第44章 Java对迭代子模式的支持
44.1Java聚集
44.2Java聚集中的迭代子
44.3java.util.Iterator接口
44.4java迭代子接口ListIterator
44.5Enumeration与Iterator
44.6其他相关模式
第45章 责任链模式
45.1击鼓传花
45.2结构
45.3传的与不纯的责任链模式
45.4AWT事件处理机制
45.5击鼓传花
45.6java系统的解
45.7责任链模式的实现
45.8对象的树结构
45.9DHTML中的事件处理
45.10与其他模式的关系
第46章 定时器与击鼓传花
46.1线程
46.2定时器
46.3击鼓传花
第47章 命令模式
47.1引言
47.2结构
47.3玉帝传美猴上天
47.4AWT的事件处理
47.5创世纪系统
47.6AudioPlayer系统
47.7增加宏命令功能
47.8实现
47.9使用场景
47.10优缺点
47.11与其他模式的关系
第48章 Swing中的命令撤销和恢复
48.1在视窗系统中使用命令模式
48.2Swing的基本撤销功能
48.3一休论禅的文字框
第49章 备忘录模式
49.1结构
49.2白箱实现
49.3双重接口
49.4黑箱实现
49.5负责人角色的增强
49.6多重检查点
49.7自述历史模式
49.8假如协议模式
49.9与其他模式的关系
49.10应用
49.11优缺点
49.12观世音甘泉活树的故事
第50章 状态模式
50.1引言
50.2结构
50.3曾侯乙编钟的描述
50.4效果
50.5应用场景
50.6实现
第51章 崂山道士与状态模式
51.1有状态的墙
51.2异常逻辑
51.3从代码重构的角度考察
第53章 访问者模式
53.1引言
53.2结构
53.3时序图
53.4使用场景
53.5实现
53.6问题与对象
53.7设计
53.8与其他模式的关系
第54章 解释器模式
54.1引言
54.2结构
54.3实现
54.4有关模式
第55章 调停者模式
55.1引言
55.2结构
55.3实现
55.4迪米特法则
55.5优缺点
55.6使用场景
55.7相关模式
附录:设计模式
创建模式:对类的实例化过程的抽象化--简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、多例模式、建造模式、原始模型模式
结构模式:描述如何将类或者对象结合在一起形成更大的结构--适配器模式、缺省适配模式、合成模式、装饰模式、代理模式、享元模式、门面模式、桥梁模式
行为模式:对不同对象之间划分责任和算法的抽象化--不变模式、策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、解释权模式、调停者模式