《修炼Java开发技术 在架构中体验设计模式和算法之美》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:于广编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2013
  • ISBN:9787302316169
  • 页数:606 页
图书介绍:本书共32章,其中第1章讲解了何谓程序员的最高境界,第2章讲解了设计模式的六个原则的知识,第3章到第25章讲解了23种设计模式的基本知识,第26章讲解了数据结构和算法的知识,第27章讲解了算法在现实中的经典应用的知识,第28章讲解了架构源于生活的知识,第29章讲解了架构师需要必备的一些知识,第30章讲解了Java中架构的知识,第31章讲解了练就金身的知识,第32章讲解了架构捷径——分析开源之架构的知识。

第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