第1章 面向对象与设计模式初步 1
1.1 模式和惯用法 1
1.2 究竟什么是设计模式 2
1.3 模式究竟有什么用途 5
1.4 模式在设计中所充当的角色 5
1.5 模式的分类 7
1.5.1 有关设计的一般性讨论 8
1.5.2 使用Java按照FORTRAN方式来编程 9
1.5.3 睁大眼睛来编程 11
1.6 对象 12
1.6.1 胡言乱语 12
1.6.2 对象是一组能力 12
1.6.3 事情是如何做错的 14
1.6.4 如何将事情做“对” 16
1.7 细胞自动机 19
1.8 getter和setter方法是有害的 23
1.8.1 描绘你自己 26
1.8.2 JavaBeans和Struts 27
1.8.3 重构 28
1.8.4 没有get/set的生活 28
1.8.5 何时可以使用访问器和修改器 30
1.8.6 getter/setter问题总结 33
第2章 使用接口和创建型模式编程 35
2.1 为什么extends是有害的 35
2.2.1 灵活性的丢失 36
2.2 接口和类 36
2.2.2 耦合 38
2.2.3 脆弱的基类问题 39
2.2.4 多重继承 45
2.2.5 框架 46
2.2.6 模板方法和工厂方法模式 47
2.2.7 “脆弱的基类”问题总结 52
2.3 什么时候使用extends合适 53
2.4 消除extends 55
2.4.1 工厂和单例模式 56
2.4.2 单例 58
2.4.3 单例中的线程问题 59
2.4.4 双检测锁定 61
2.4.5 销毁单例 62
2.4.6 抽象工厂 63
2.4.7 模式大杂烩 67
2.4.8 工厂模式中的动态创建 69
2.4.9 命令和策略模式 71
2.5 总结 75
第3章 生命游戏 76
3.1 获得生命 76
3.2 绘制生命游戏的结构图 78
3.3 时钟子系统:观察者模式 81
3.4 时钟子系统:访问者模式 97
3.5 菜单子系统:合成模式 101
3.6 菜单子系统:门面模式 108
3.7 MenuSite类 109
3.8 核心类 127
3.8.1 Universe类 127
3.8.2 Cell接口 132
3.8.3 Resident类 135
3.8.4 Neighborhood类 138
3.9 调停者模式 147
3.10 重温合成模式 148
3.11 再访合成模式 153
3.12 享元模式 158
3.13 备忘录模式 163
3.14 零散的结尾 165
3.15 总结 169
第4章 实现嵌入式SQL 170
4.1 需求 170
4.2 体系结构 171
4.3 数据存储层 172
4.3.1 表接口 174
4.3.2 桥梁模式 179
4.3.3 使用抽象工厂模式创建表接口 180
4.3.4 使用被动迭代器和建造者模式创建和保存表 184
4.3.5 填充表 194
4.3.6 查看表的内容:迭代器模式 197
4.3.7 使用命令模式实现事务(撤销操作)系统 205
4.3.8 修改表:策略模式 209
4.3.9 select与join操作 213
4.3.10 杂项 219
4.3.11 表的变化形式:装饰模式 226
4.4 加入SQL语言 235
4.4.1 SQL引擎层的结构 235
4.4.2 对输入作断词、享元模式重访和责任链模式 236
4.4.3 词法分析器:责任链模式 244
4.4.4 ParserFailure类 251
4.5 Database类 253
4.5.1 使用Database类 254
4.5.2 代理模式 257
4.5.3 词符集和其他常量 261
4.6.1 对SQL的支持 267
4.6 解释器模式 267
4.6.2 观察运行中的解释器 288
4.7 JDBC层 295
4.8 状态模式和JDBCConnection 301
4.8.1 执行SQL语句 306
4.8.2 适配器模式(结果集) 307
4.8.3 完成代码 312
4.8.4 如果桥梁模式失效 312
4.9 结束语 313
附录 设计模式速查参考 314
创建型模式 314
结构型模式 328
行为型模式 347