第1篇 六大设计原则 2
第1章 设计模式的定义及设计原则 2
1.1初谈设计模式 2
1.2单一职责原则 3
1.2.1“超人”也是人 3
1.2.2简单也很难做到 5
1.2.3帮“超人”减负 5
1.2.4单一职责原则能否扩展 7
1.2.5小结与思考 9
1.3里氏代换原则 10
1.3.1鲨鱼到底是不是鱼 10
1.3.2子类与父类 11
1.3.3里氏代换原则的定义 11
1.3.4里氏代换原则的精髓 11
1.3.5小结与思考 14
1.4开放-封闭原则 14
1.4.1添加而不是修改 14
1.4.2应用广泛的开放-封闭原则 15
1.4.3开放-封闭原则的意义所在 17
1.4.4小结与思考 20
1.5依赖倒转原则 20
1.5.1再谈面向对象 20
1.5.2依赖倒转原则的定义 20
1.5.3依赖倒转原则的重要意义 21
1.5.4小结与思考 23
1.6合成/聚合复用原则 24
1.6.1合成/聚合复用原则的定义 24
1.6.2何时使用合成/聚合复用原则 24
1.6.3合成/聚合复用原则的优缺点 28
1.6.4小结与思考 28
1.7迪米特法则 28
1.7.1不要和陌生人说话 28
1.7.2迪米特法则的定义 29
1.7.3耦合性问题的讨论 29
1.7.4小结与思考 33
第2篇 创建型模式 36
第2章 工厂方法模式——面向对象的工业时代 36
2.1代码工业时代初期 36
2.2如何烤出各种各样的面包 39
2.3代码工业时代的二次革命 41
2.4小结与思考 43
第3章 抽象工厂模式——如果想开分厂 45
3.1产品单一打不开市场 45
3.2面包与披萨可以兼得 46
3.3投资需谨慎 50
3.4建厂方案大评比 51
3.5小结与思考 52
第4章 单例模式——非你莫属 54
4.1婚姻法出台 54
4.2老婆只能娶一个 54
4.3娶老婆的代码实现 57
4.4婚礼现场直播怎么办 62
4.5小结与思考 65
第5章 建造者模式——丰富的生产线 66
5.1化学老师的作业 66
5.2神奇的化学实验 66
5.3老师来指挥 71
5.4做实验不是烤面包 75
5.5小结与思考 76
第6章 原型模式——打印报名信息 77
6.1考证达人 77
6.2考试太多报名信息别打错 77
6.3线程也要安全生产 84
6.4别被Java欺骗——深复制与浅复制 84
6.5小结与思考 90
第3篇 结构型模式 94
第7章 桥接模式——课程太多别看花眼 94
7.1新学期选课 94
7.2为什么不能选其他专业的课程 98
7.3数学课还不一样? 99
7.4最佳选课方式 99
7.5小结与思考 103
第8章 适配器模式——走到哪里都不怕 105
8.1出国前的准备 105
8.2笔记本到哪里都能充电 106
8.3对象的“电源适配器” 107
8.4充电不是代替工作 112
8.5小结与思考 112
第9章 装饰模式——七十二变 114
9.1超级化妆师 114
9.2古装现代都能演 119
9.3还需要招新演员? 121
9.4穿越也不怕 122
9.5小结与思考 122
第10章 组合模式——好大一棵树 124
10.1复习数据结构 124
10.2大学是一棵树 127
10.3帮校长管理学校 128
10.4任务顺利完成 132
10.5小结与思考 132
第11章 享元模式——分享是一种美德 134
11.1“对象”也有胖瘦 134
11.2开发连连看游戏 135
11.3游戏占内存太大怎么办 137
11.4有付出就有回报 140
11.5小结与思考 142
第12章 外观模式——机构融合的艰辛 144
12.1收购加工厂 144
12.2管理新厂的麻烦 145
12.3设置“办事处” 148
12.4好方法能推广到别处吗 150
12.5小结与思考 150
第13章 代理模式——类也需要红娘 151
13.1“翻墙”时代 151
13.2找个代理来上网 153
13.3并非所有网站都要“翻墙” 155
13.4 J2SE中动态代理简介 156
13.5小结与思考 157
第4篇 行为模式 160
第14章 模板方法模式——有模板,能量产 160
14.1做最好的手机 161
14.2限量版是个好卖点 164
14.3给手机装上不同的操作系统 169
14.4小结与思考 170
第15章 策略模式——自有妙计 171
15.1变幻莫测的市场 171
15.2蛋糕生产策略的制定 174
15.3策略模式的可扩展性 175
15.4小结与思考 176
第16章 状态模式——火车跑得快,全凭车头带 178
16.1时快时慢的火车 178
16.2提速与让车 179
16.3高铁时代 181
16.4小结与思考 185
第17章 观察者模式——你做坏事我知道 186
17.1知己知彼,百战不殆 186
17.2又见007 186
17.3一举一动都知道 191
17.4间谍也不是万能的 194
17.5小结与思考 197
第18章 备忘录模式——数据也穿越 198
18.1突如其来的停电 198
18.2游戏进度不会丢 199
18.3为了进度升级计算机 202
18.4停电不是每天都有 209
18.5小结与思考 210
第19章 中介者模式——“万能”的客服MM 211
19.1一次网购体验 211
19.2客服MM“无所不能” 212
19.3网站扩大忙坏了客服MM 218
19.4合理对待投诉 219
19.5小结与思考 219
第20章 命令模式——军令如山倒 221
20.1赤壁之战 221
20.2曹军的传令官 222
20.3如果没有铁索连舟 226
20.4“后悔药”的代码实现 227
20.5小结与思考 229
第21章 访问者模式——检查报表更方便 230
21.1领导来检查 230
21.2乱七八糟的报表 233
21.3访问者模式的尴尬境地 237
21.4何时使用访问者模式 238
21.5小结与思考 241
第22章 职责链模式——切莫先斩后奏 242
22.1钦差大人查访 242
22.2先斩后奏惹麻烦 242
22.3事情还是让皇上裁断吧 245
22.4灵活使用职责链 247
22.5小结与思考 247
第23章 迭代器模式——重复也不会乏味 249
23.1招聘会的收获 249
23.2快速筛选简历 250
23.3简历筛选迭代器 250
23.4小结与思考 254
第24章 解释器模式——出国需要翻译 255
24.1短信“轰炸” 255
24.2骚扰短信挑选机 256
24.3骗子远离我 258
24.4小结与思考 261
第5篇 模式总结 264
第25章 模式总结——最后大阅兵 264
25.1各种模式之间的关系详解 264
25.2灵活运用各种模式 265
25.3设计模式思考图 265
25.4关于架构师 266
25.5小结与思考 267
附录A UML基础 276
A.1 UML的组成 276
A.2 UML的类图 277
A.3类之间的关系 277
A.4小结 279
附录B面向对象基础 280
B.1面向对象开发方法的优点 280
B.2什么是面向对象程序设计 280
B.3面向对象的重要概念 281
B.4类与实例的关系 282
B.5面向对象程序设计的软件生命周期 282