第1章 什么是程序员的最高境界 1
1.1在浩瀚的Java体系中探索学习过程 2
1.2程序员的六个阶段 2
1.3 Java程序员的三层境界 4
1.4如何成为一名合格的Java初级程序员 5
1.5程序员的职场晋升之路 6
1.5.1综合才能型发展路线图 7
1.5.2初入职场,程序员的上升空间在哪里 8
1.6一般程序员的必经之路 10
1.7架构师们在巅峰处 11
1.7.1什么是架构师 11
1.7.2架构师的重要作用 12
1.7.3如何成为优秀的软件架构师 12
1.7.4架构师的自我培养过程 13
1.7.5 Java架构师的发展展望 13
1.7.6算法和数据结构的重要性 14
1.8实现架构之美 15
1.8.1什么样的架构才算是一个美丽的架构 16
1.8.2如何成就一个美丽的架构 16
1.8.3现实中的架构者 17
第2章 架构中的设计原则 19
2.1架构的任务 20
2.1.1什么是好的架构 20
2.1.2软件架构师的角色 21
2.1.3架构师的第一任务 21
2.2架构中的设计原则 22
2.2.1单一职责原则 22
2.2.2里氏替换原则(LSP) 25
2.2.3依赖注入原则(DIP) 28
2.2.4接口分离原则(ISP) 30
2.2.5迪米特原则(LOD) 33
2.2.6开闭原则(OCP) 36
2.3算法 39
2.3.1什么是算法 39
2.3.2在计算机中的算法 40
2.3.3为什么算法是程序的灵魂 41
2.3.4表示算法的方法 42
2.3.5学好算法的秘诀 44
2.4数据结构 45
2.4.1 Collection接口 45
2.4.2 List接口 46
2.4.3 ArrayList类 46
2.4.4 Vector类 47
2.4.5 Stack类 47
2.4.6 Set接口 47
2.4.7 Map接口 48
2.4.8 Hashtable类 48
2.4.9 HashMap类 49
2.4.10 WeakHashMap类 49
2.5飞人的号码 49
2.5.1何谓设计模式 49
2.5.2模式的四个基本要素 50
2.5.3二十三个设计模式 50
第3章 工厂模式 55
3.1工厂模式介绍 56
3.2简单工厂模式 56
3.2.1思想源于接口 58
3.2.2采用简单工厂模式解决问题的思路 58
3.2.3举例说明 59
3.2.4简单工厂中方法的写法 63
3.2.5简单工厂模式的优点和缺点 66
3.3工厂方法模式 67
3.3.1工厂方法模式的构成 67
3.3.2举例说明 68
3.3.3简单工厂模式与工厂方法模式的对比 74
3.4抽象工厂模式 75
3.4.1抽象工厂模式的起源和结构 76
3.4.2举例说明 78
3.4.3使用抽象工厂模式的情形 87
3.4.4抽象工厂模式的优点和缺点 88
第4章 单例模式 89
4.1单例模式介绍 90
4.1.1实现单例的方式 90
4.1.2单例模式的特点 90
4.1.3单例模式的功能 91
4.1.4单例模式的范围 91
4.1.5单例模式的命名 91
4.2单例模式的种类 92
4.2.1懒汉式单例 92
4.2.2饿汉式单例 93
4.2.3登记式单例 94
4.3举例说明 95
4.3.1读取配置文件 96
4.3.2两种实现方式 100
4.3.3单例模式的调用顺序 102
4.3.4单例模式的一个应用 103
4.3.5一个JDBC数据库工具类 105
4.4双重检查加锁 106
4.5延迟加载 107
4.5.1 Java中缓存的基本实现 107
4.5.2利用缓存来实现单例模式 108
4.6一种更好的方式 109
4.7单例和枚举 110
4.8总结单例模式的本质 110
4.9单例模式的优点和缺点 112
第5章 建造者模式 115
5.1建造者模式介绍 116
5.1.1适用场景 116
5.1.2建造者模式的结构 117
5.1.3复杂对象 117
5.2举例说明 119
5.2.1汽车部件问题 120
5.2.2三维模型 123
5.2.3与工厂模式的区别 130
5.3对建造者模式的深入理解 132
5.4对建造者模式的总结 134
第6章 原型模式 137
6.1原型模式介绍 138
6.1.1定义 138
6.1.2实现拷贝的方法 139
6.2原型模式浅拷贝与原型模式深度拷贝 140
6.2.1什么是浅拷贝和深拷贝 141
6.2.2浅拷贝和深拷贝的应用 142
6.3举例说明 145
6.3.1信用卡账单处理问题 146
6.3.2某公司的OA办公问题 152
6.4对原型模式的总结 158
第7章 适配器模式 161
7.1适配器模式介绍 162
7.1.1适配器模式的结构 162
7.1.2两种适配器 163
7.2举例说明 166
7.2.1购买耳机问题 166
7.2.2验证给定客户地址 167
7.3对适配器模式的总结 170
第8章 桥梁模式 173
8.1桥梁模式介绍 174
8.1.1桥梁模式的结构 174
8.1.2角色之间的关联 175
8.2使用桥梁模式的场景 176
8.2.1不使用模式的解决方案 176
8.2.2使用桥梁模式来解决问题 180
8.2.3桥梁模式在Java中的典型应用 184
8.3详解桥梁模式 185
8.3.1几个概念 185
8.3.2谁来桥接的问题 187
8.4举例说明 187
8.4.1由抽象部分的对象自己来创建相应的Implementor对象 187
8.4.2在Abstraction中创建默认的Implementor对象 189
8.4.3使用抽象工厂或者是简单工厂 190
8.4.4使用IoC/DI的方式 190
8.5使用桥梁模式实现JDBC 190
8.6广义桥接 192
8.7对桥梁模式的总结 194
8.7.1对设计原则的体现 195
8.7.2何时使用桥梁模式 195
8.7.3桥梁模式的优点 196
第9章 组合模式 197
9.1组合模式介绍 198
9.1.1组合模式的结构 198
9.1.2组合模式的两种形式 199
9.2举例说明 202
9.2.1实现文件系统的文件/目录结构 202
9.2.2实现逻辑树 205
9.3对组合模式的总结 208
第10章 装饰模式 211
10.1装饰模式介绍 212
10.1.1装饰模式的特点 212
10.1.2装饰模式的结构 212
10.2举例说明 216
10.2.1奖金计算问题 216
10.2.2蛋糕问题 224
10.3对象组合 226
10.4 Java中的装饰模式应用 229
10.4.1 Java流接口和装饰模式的关系 229
10.4.2实现英文加密存放 230
10.5装饰模式和AOP 231
10.5.1 AOP基础 231
10.5.2用装饰模式做出类似AOP的效果 233
10.6对装饰模式的总结 236
第11章 外观模式 239
11.1外观模式介绍 240
11.1.1外观模式的核心思想 240
11.1.2外观模式的结构 240
11.1.3外观模式的意义 243
11.2举例说明 243
11.2.1泡茶问题 243
11.2.2抽屉问题 246
11.2.3理财产品问题 247
11.2.4旅游计划问题 248
11.3对外观模式的总结 252
第12章 享元模式 253
12.1享元模式介绍 254
12.1.1为什么使用享元模式 254
12.1.2享元模式的结构 254
12.1.3享元模式的两种形式 256
12.1.4享元模式的应用场景 256
12.2举例说明 258
12.2.1咖啡问题 258
12.2.2象棋问题 260
12.3数据库连接池应用 263
12.4在XML等数据源中应用 265
12.5对享元模式的总结 267
第13章 代理模式 269
13.1代理模式介绍 270
13.1.1代理模式的结构 270
13.1.2静态代理和动态代理 271
13.2举例说明 277
13.2.1运行的坦克问题 277
13.2.2红酒问题 285
13.2.3春运买票问题 286
13.2.4媒人问题 289
13.3剖析代理模式 291
13.3.1普通代理 291
13.3.2强制代理 293
13.3.3虚拟代理 298
13.4对代理模式的总结 298
第14章 职责链模式 299
14.1职责链模式介绍 300
14.1.1职责链模式的结构 300
14.1.2两种责任链模式 302
14.2举例说明 302
14.2.1击鼓传花问题 302
14.2.2学生会的申请问题 307
14.3对责任链模式的总结 310
第15章 模板方式模式 313
15.1模板方式介绍 314
15.1.1模板方式的类图 314
15.1.2三类模板方式 315
15.2举例说明 317
15.2.1写字板问题 317
15.2.2闭门制造悍马车的问题 319
15.3对模板方式模式的总结 326
第16章 解释器模式 329
16.1解释器模式介绍 330
16.1.1解释器模式的结构 330
16.1.2解释器模式的实现办法 331
16.1.3与Composite(组合模式)的区别 336
16.2举例说明 336
16.2.1四则运算问题 337
16.2.2编译器问题 342
16.2.3公司的任务问题 344
16.3对解释器模式的总结 348
第17章 命令模式 351
17.1命令模式介绍 352
17.1.1命令模式的结构 352
17.1.2认识命令模式 355
17.2举例说明 356
17.2.1开机问题 356
17.2.2参数化配置问题 361
17.2.3计算器问题 364
17.2.4点菜问题 372
17.3退化命令模式 383
17.4对命令模式的总结 386
第18章 迭代器模式 389
18.1迭代器模式介绍 390
18.1.1迭代器的结构 390
18.1.2迭代器模式的实现方式 393
18.1.3实现自己的迭代器 395
18.2举例说明 395
18.3对迭代器模式的总结 397
第19章 中介者模式 399
19.1中介者模式介绍 400
19.1.1中介者模式的结构 400
19.1.2 MVC模型和终结者模式 401
19.2两种中介者模式 402
19.2.1标准的中介者模式 402
19.2.2广义中介者 406
19.3举例说明 410
第20章 备忘录模式 417
20.1备忘录模式介绍 418
20.1.1备忘录模式的结构 418
20.1.2实现双接口 418
20.2举例说明 419
20.2.1“白箱”备忘录模式的实现 420
20.2.2“黑箱”备忘录模式的实现 423
20.2.3多重检查点 425
20.2.4“自述历史”模式 429
20.3对备忘录模式的总结 431
第21章 观察者模式 435
21.1观察者模式介绍 436
21.1.1观察者模式的结构 436
21.1.2 Java语言提供的对观察者模式的支持 438
21.2 Java中的DEM事件机制 443
21.3举例说明 444
21.3.1商品价格问题 444
21.3.2“极品飞车”问题 445
21.3.3“天气预报”问题 448
21.3.4“烧水”问题 449
21.3.5旅行问题 451
21.4对观察者模式的总结 455
第22章 状态模式 457
22.1状态模式介绍 458
22.1.1状态模式的结构 458
22.1.2状态模式的实现 460
22.2举例说明 461
22.2.1会员状态问题 461
22.2.2打篮球的状态问题 462
22.2.3投票系统问题 463
22.2.4画图程序问题 466
22.3对状态模式的总结 468
第23章 策略模式 471
23.1策略模式介绍 472
23.1.1设计原则和对象 472
23.1.2策略模式的结构 472
23.2策略模式的作用 474
23.2.1一个场景 474
23.2.2进一步认识策略模式 479
23.3容错恢复机制 481
23.4举例说明 483
23.4.1“刘备回荆州”问题 483
23.4.2“石头、剪子、布”问题 485
23.4.3“发送邮件”问题 490
23.5策略模式结合模板方式模式 493
23.6对策略模式的总结 496
第24章 访问者模式 501
24.1访问者模式介绍 502
24.1.1访问者模式的结构 502
24.1.2实现访问者模式 505
24.2分派 508
24.2.1静态分派 508
24.2.2动态分派 509
24.2.3双重分派 510
24.3举例说明 513
24.3.1“男人和女人”问题 514
24.3.2公司部门问题 517
24.4对访问者模式的总结 519
第25章 深入数据结构 521
25.1用数组实现排序 522
25.1.1一维数组 522
25.1.2多维数组 522
25.1.3使用数组实现排序 522
25.2栈 524
25.2.1栈中的数据 524
25.2.2栈中的基本运算 526
25.2.3实现栈的基本操作 526
25.2.4邮政模拟 528
25.2.5堆和栈的区别 530
25.3队列 532
25.3.1队列的基本操作 532
25.3.2循环队列 534
25.3.3环绕式处理 534
25.4链表 537
25.4.1链节点 540
25.4.2双端链表 545
25.4.3有序链表 547
25.4.4双向链表 548
第26章 最优算法为最美 551
26.1排序算法 552
26.1.1排序算法介绍 552
26.1.2直接选择排序 552
26.1.3堆排序 554
26.1.4冒泡排序 556
26.1.5快速排序 557
26.1.6直接插入排序 559
26.1.7折半插入排序 560
26.1.8希尔排序(Shell排序) 562
26.1.7归并排序 563
26.1.10桶式排序 565
26.1.11基数排序 567
26.1.12对排序算法的总结 568
26.2贪婪算法 569
26.2.1贪婪算法基础 569
26.2.2解决“找零钱”问题 570
26.2.3解决“最短路径”问题 571
26.3分治算法 573
26.3.1分治算法基础 573
26.3.2“最大值和最小值”问题 573
26.4动态规划算法 575
26.4.1动态规划算法基础 576
26.4.2解决“找零”问题 576
26.5随机算法 578
26.5.1随机算法基础 578
26.5.2“随机排序”问题 579
26.6试探算法 580
26.6.1试探法算法基础 580
26.6.2解决“八皇后”问题 581
26.7递归算法 582
26.7.1递归算法基础 583
26.7.2解决阶乘问题 583
第27章 架构源于生活 585
27.1软件架构基础 586
27.1.1软件架构介绍 586
27.1.2架构的发展源于生活 586
27.2架构的目标 588
27.3架构的种类 588
27.4架构模式 589
27.4.1架构标准 589
27.4.2架构模式的分类 590
27.5曾经的项目 594
27.5.1一个Java游戏项目的总结 594
27.5.2一个Java Web项目的总结 595
27.6架构师和项目经理 597
27.7架构师的成长之路 600
27.7.1必然会有的感觉 600
27.7.2写代码所要经历的阶段 600
27.7.3架构师的几件法宝 602
27.7.4对架构师的技能要求 603
参考文献 606