转载至: https://yq.aliyun.com/articles/607543
下载链接: 点我一键跳转到 下载链接
下载声明: 本资料仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版!
《Java与模式》是一本讲解设计原则以及最为常见的设计模式的实用教材,目的是为了工作繁忙的Java系统设计师提供一个快速而准确的设计原则和设计模式的辅导。全书分为55章,第一个章节讲解一个编编程模式,说明此模式的用意、结构,以及这一模式适合于什么样的情况等。每一个章节都附有多个例子和练习题,研习这些例子、完成这些练习题可以帮助读者更好地理解所讲的内容。大多数的章节都是相对独立的,读者可以从任何一章开始读起。为了满足不同程序的读者的需要,书中提供了一些标为“专题”的章节,不阅读这些章节,对阅读书中的标准章节没有影响。
第1章 模式的简史和形而上学 3
1.1 模式是什么 3
1.2 软件模式的简史 3
1.3 模式的起源 4
1.4 与道家思想的关系 5
1.5 软件的永恒之道 9
1.6 模式的要素 10
1.7 本书讲解模式的格式 12
第2章 统一建模语言UML简介 15
2.1 建造世界贸易中心 15
2.2 什么是UML 16
2.3 UML包括什么 17
2.5 类图 19
2.6 时序图 27
2.7 状态图 28
2.8 UML及建模的工具 30
第3章 软件的可维护性与可复用性 35
3.1 软件系统的可维护性 35
3.2 系统的可复用性 39
3.3 老子论“不武” 42
第4章 “开-闭”原则(OCP) 45
4.1 什么是“开-闭”原则 45
4.2 怎样做到“开-闭”原则 45
4.3 与其他设计原则的关系 47
4.4 策略模式对“开–闭”原则的支持 49
4.5 在其他设计模式中的体现 50
4.6 一个重构做法的讨论 54
第5章 专题:Java语言的接口 59
5.1 什么是接口 59
5.2 为什么使用接口 60
5.3 Java接口常见的用法 63
第6章 专题:抽象类 69
6.1 什么是抽象类 69
6.2 抽象类是用来继承 70
6.3 基于抽象类的模式和原则 72
6.4 什么时候才应当使用继承复用 73
第7章 里氏代换原则(LSP) 79
7.1 美猴王的智慧 79
7.2 什么是里氏代换原则 80
7.3 里氏代换原则在设计模式中的体现 82
7.4 墨子论“取譬” 83
7.5 从代码重构的角度理解 84
第8章 依赖倒转原则(DIP) 95
8.1 为何而“倒转” 95
8.2 复用与可维护性的“倒转” 96
8.3 依赖倒转原则 96
8.4 怎样做到依赖倒转原则 99
8.5 Java对抽象类型的支持 101
8.6 一个例子:账号、账号的种类和账号的状态 103
8.7 墨子论“取周” 106
8.8 依赖倒转原则的长处和短处 107
第9章 接口隔离原则(ISP) 109
9.1 什么是接口隔离原则 109
9.2 一个角色隔离原则的例子 110
9.3 定制服务的例子 112
第10章 合成/聚合复用原则(CARP) 115
10.1 合成和聚合的区别 115
10.2 复用的基本种类 115
10.3 从代码重构的角度理解 117
第11章 迪米特法则(LoD) 121
11.1 迪米特法则的各种表述 121
11.2 狭义的迪米特法则 121
11.3 迪米特法则与设计模式 126
11.4 广义的迪米特法则 128
11.5 广义迪米特法则在类的设计上的体现 129
11.6 广义迪米特法则在代码层次上的实现 133
11.7 老子论“圣人之治” 133
第12章 简单工厂(Simple Factory)模式 139
12.1 工厂模式的几种形态 139
12.2 简单工厂模式的引进 139
12.3 简单工厂模式的结构 146
12.4 简单工厂模式的实现 148
12.5 简单工厂模式与其他模式的关系 153
12.6 模式的优点和缺点 155
12.7 简单工厂模式在Java中的应用 156
12.8 女娲抟土造人 160
第13章 工厂方法(Factory Method)模式 165
13.1 引言 165
13.2 工厂方法模式的结构 167
13.3 工厂方法模式在农场系统中的实现 172
13.4 关于工厂方法模式的实现 177
13.5 Java语言中工厂方法模式的例子 179
13.6 工厂方法模式与其他模式的关系 182
13.7 女娲举绳造人 185
13.8 其他的例子 185
第14章 抽象工厂(Abstract Factory)模式 193
14.1 引言 193
14.2 问题 195
14.3 抽象工厂模式的结构 198
14.4 在什么情形下应当使用抽象工厂模式 204
14.5 抽象工厂模式在农场系统中的实现 205
14.6 抽象工厂模式的另一个例子 211
14.7 “开-闭”原则 212
14.8 关于模式的实现 213
14.9 女娲造万物的故事 214
第15章 单例(Singleton)模式 221
15.1 引言 221
15.2 单例模式的结构 222
15.3 在什么情况下使用单例模式 228
15.4 单例类的状态 229
15.5 一个实用的例子:属性管理器 230
15.6 Java语言中的单例模式 235
15.7 专题:不完全的单例类 239
15.8 相关模式 240
15.9 附录:双重检查成例的研究 243
15.10 给读者的一点建议 247
第16章 专题:单例模式与MX记录 249
16.1 问题与解决方案 249
16.2 目录服务与MX记录 251
16.3 JNDI架构介绍 252
16.4 如何使用JNDI编程 253
16.5 系统设计 255
16.6 讨论 261
第17章 专题:多例(Multiton)模式与多语言支持 267
17.1 引言 267
17.2 多例模式 269
17.3 多语言项目的设计 272
第18章 专题:序列键生成器与单例及多例模式 283
18.1 问题 283
18.2 将单例模式应用到系统设计中 285
18.3 将多例模式应用到系统设计中 297
18.4 讨论 300
第19章 建造(Builder)模式 301
19.1 引言 301
19.2 建造模式的结构 302
19.3 建造模式的活动序列 307
19.4 建造模式的实现 307
19.5 众神造人的神话故事 312
19.6 JavaMail中的建造模式 313
19.7 一个发送邮件的例子 315
19.8 在什么情况下使用建造模式 325
19.9 建造模式与其他模式的关系 326
第20章 原始模型(Prototype)模式 335
20.1 引言 335
20.2 变量、对象以及对象的引用 336
20.3 Java对象的复制 337
20.4 原始模型模式的结构 341
20.5 模式的实现:深复制和浅复制 345
20.6 孙大圣的身外身法术 347
20.7 在什么情况下使用原始模型模式 358
20.8 模式的优点和缺点 359
20.9 原始模型模式与其他模式的关系 359
第21章 专题:JavaBean的“冷藏” 和“解冻” 363
21.1 引言 363
21.2 什么是“冷藏”和“解冻” 363
21.3 什么可以“冷藏”,什么不可以 364
21.4 Beans.instantiate()方法 366
21.5 怎样在JSP中使用Beans.Instantiate()方法 372
21.6 与装饰模式的关系 374
第22章 适配器(Adapter)模式 379
22.1 引言 379
22.2 类的适配器模式的结构 380
22.3 类的适配器模式的效果 382
22.4 对象的适配器模式的结构 382
22.5 在什么情况下使用适配器模式 384
22.6 Iterator与Enumeration 384
22.7 利用适配器模式指方为圆 387
22.8 适配器模式在架构层次上的应用 391
22.9 关于模式实现的讨论 393
22.10 适配器模式与相关的模式 394
第23章 缺省适配(Default Adapter)模式 401
23.1 鲁智深的故事 401
23.2 WindowAdapter是缺省适配模式 404
23.3 模式的结构 406
23.4 在什么情况下使用本模式 408
23.5 模式的实现 408
23.6 J2SE中的缺省适配模式 408
23.7 一个例子 410
第24章 专题:XMLProperties 与适配器模式 415
24.1 引言 415
24.2 SAX2浏览器 417
24.3 开始XMLProperties项目 423
第25章 合成(Composite)模式 435
25.1 对象的树结构 435
25.2 介绍合成模式 437
25.3 安全式和透明式的合成模式 438
25.4 安全式合成模式的结构 439
25.5 透明式的合成模式的结构 442
25.6 合成模式的实现 446
25.7 道士的故事 447
25.8 一个绘图的例子 448
25.9 AWT库中的例子 454
25.10 合成模式与其他模式的关系 455
第26章 装饰(Decorator)模式 461
26.1 引言 461
26.2 装饰模式的结构 461
26.3 装饰模式应当在什么情况下使用 467
26.4 孙大圣的故事 467
26.5 使用装饰模式的长处和短处 468
26.6 模式实现的讨论 469
26.7 装饰模式与其他模式的关系 472
26.8 实例:GrepReader 473
26.9 一个例子:发票系统 478
26.10 关于适配器模式与装饰模式的对话 491
第27章 专题:设计模式在Java I/O 库中的应用 497
27.1 引言 497
27.2 java.io库的设计原则 499
27.3 装饰模式的应用 500
27.4 半透明的装饰模式 509
27.5 适配器模式的应用 512
27.6 从byte流到char流的适配 518
第28章 代理(Proxy)模式 525
28.1 引言 525
28.2 代理的种类 527
28.3 代理模式的结构 529
28.4 代理模式的时序 532
28.4 Java 2.0对代理模式的支持 533
28.5 高老庄悟空降八戒 537
28.5 代理模式的长处和短处 538
28.6 模式的实现 539
28.7 代理模式与其他模式的关系 540
第29章 专题:智能引用代理 543
29.1 问题 543
29.2 系统设计 543
29.3 系统的时序 546
29.4 系统的源代码 546
第30章 专题:虚拟代理的例子 551
30.1 问题 551
30.2 系统的要求 552
30.3 系统的设计 553
30.4 系统的时序 554
30.5 系统的源代码 555
第31章 享元模式(Flyweight Pattern) 559
31.1 引言 559
31.2 单纯享元模式的结构 560
31.3 复合享元模式的结构 564
31.4 模式的实现 569
31.5 一个咖啡摊的例子 575
31.6 咖啡屋的例子 580
31.7 享元模式应当在什么情况下使用 585
31.8 从代码重构的角度看享元模式 586
31.9 享元模式的长处和短处 587
31.10 相关的模式 588
第32章 门面(Facade)模式 595
32.1 引言 595
32.2 门面模式的结构 597
32.3 门面模式的实现 598
32.4 在什么情况下使用门面模式 598
32.5 迪米特法则(LoD) 599
32.6 一个例子 599
32.7 使用门面模式的设计 603
32.8 Session门面模式 606
第33章 桥梁(Bridge)模式 609
33.1 引言 609
33.2 桥梁模式的结构 611
33.3 Java语言中的Peer架构 613
33.4 驱动器和JDBC驱动器 617
33.5 从重构的角度考察 618
33.6 桥梁模式和其他模式的关系 624
33.7 八戒“转世投胎”的故事 627
33.8 关于桥梁模式的实现 629
33.9 在什么情况下应当使用桥梁模式 630
第34章 不变(Immutable)模式 639
34.1 引言 639
34.2 不变模式的结构 639
34.3 不变模式的实现 640
34.4 不变模式在Java语言中的应用 640
34.5 不变模式的优点和缺点 642
34.6 不变模式与享元模式的关系 642
34.7 一个例子:复数类 643
第35章 策略(Strategy)模式 657
35.1 引言 657
35.2 模式的实现 659
35.3 Java语言内部的例子 660
35.4 排序策略系统 662
35.5 一个例子:图书折扣的计算 663
35.6 在什么情况下应当使用策略模式 668
35.7 策略模式的长处和短处 668
35.8 策略模式与其它模式的关系 669
35.9 设计原则的讨论 671
35.10 诸葛亮的锦囊妙计 672
第36章 模板方法(Template Method)模式 677
36.1 引言 677
36.2 模板方法模式的结构 677
36.3 “好莱坞原则” 680
36.4 一个例子 680
36.5 继承作为复用的工具 683
36.6 Java语言里面使用过的模板方法模式 685
36.7 模板方法模式中的方法 686
36.8 模板方法模式在代码重构中的应用 688
36.9 化重构的原则 692
36.10 西天取经的八十一难 692
第37章 专题:Servlet技术中的模式 697
37.1 Servlet技术介绍 697
37.2 模版方法模式的使用 700
37.3 观察者模式的应用 704
第38章 观察者(Observer)模式 711
38.1 引言 711
38.2 观察者模式的结构 712
38.3 第二种实现方案 716
38.4 Java语言提供的对观察者模式的支持 720
38.5 菩萨的守瓶龟 727
38.6 Java中的DEM事件机制 728
38.7 观察者模式与其他模式的关系 729
第39章 专题:观察者模式与AWT中的事件处理 733
39.1 引言 733
39.2 DEM的结构 734
第40章 专题:观察者模式与SAX2浏览器 749
40.1 引言 749
40.2 SAX2是怎么工作的 750
40.3 ContentHandler接口 750
40.4 怎样实现ContentHandler接口 752
40.5 怎样使用ContentHandler 754
40.6 缺省适配模式与DefaultHandler 756
40.7 简单工厂模式的应用 761
第41章 专题:观察者模式与Swing定时器 763
41.1 为什么需要定时器 763
41.2 Utility定时器与Swing定时器的区别 763
41.3 使用Swing定时器的方法 765
41.4 观察者模式的应用 766
41.5 单例模式的应用 769
第42章 专题:MVC模式与用户输入数据检查 775
42.1 什么是MVC模式 775
42.2 MVC是架构模式 778
42.3 MVC模式在J2EE技术中的应用 779
42.4 从代码重构的角度考察 781
42.5 用户输入检查与MVC模式 783
42.5 SQL 注射Injection 785
第43章 迭代子(Iterator)模式 791
43.1 引言 791
43.2 迭代子模式的结构 793
43.3 迭代子模式的实现 804
43.4 迭代子模式的长处和短处 806
43.5 一个例子 806
43.6 迭代子模式与其他模式的关系 812
第44章 专题:Java对迭代子 模式的支持 819
44.1 Java聚集 819
44.2 Java聚集中的迭代子 821
44.3 java.util.Iterator接口 823
44.4 Java迭代子接口ListIterator 826
44.5 Enumeration与Iterator 831
44.6 其他相关模式 833
第45章 责任链(Chain of Responsibility)模式 835
45.1 从击鼓传花谈起 835
45.2 责任链模式的结构 835
45.3 纯的与不纯的责任链模式 839
45.4 Java1.0版的AWT事件处理机制 839
45.5 《红楼梦》中击鼓传花的故事 841
45.6 Java系统的解 842
45.7 责任链模式的实现 849
45.8 对象的树结构 850
45.9 DHTML中的事件处理 851
45.10 责任链模式与其他模式的关系 854
第46章 专题:定时器与击鼓传花 859
46.1 线程 859
46.2 定时器 860
46.3 击鼓传花 862
第47章 命令(Command)模式 873
47.1 引言 873
47.2 命令模式的结构 873
47.3 玉帝传美猴王上天 877
47.4 Java语言内的例子:AWT的事件处理 878
47.5 一个例子:创世纪系统 878
47.6 一个例子:AudioPlayer系统 883
47.7 增加宏命令功能 889
47.8 模式的实现 891
47.9 在什么情况下应当使用命令模式 892
47.10 使用命令模式的长处和短处 893
47.11 命令模式与其他模式的关系 893
第48章 专题:Swing库中的命令 撤销和恢复 905
48.1 在视窗系统中使用命令模式 905
48.2 Swing的基本的撤销功能 905
48.3 一休论禅的文字框 913
第49章 备忘录(Memento)模式 921
49.1 引言 921
49.2 备忘录模式的结构 922
49.3 备忘录模式的白箱实现 923
49.4 双重接口及其在Java语言中的实现 928
49.5 备忘录模式的黑箱实现 931
49.6 负责人角色的增强 937
49.7 备忘录模式与多重检查点 937
49.8 “自述历史”模式 944
49.9 “假如”协议模式 948
49.10 备忘录模式与其他模式的关系 949
49.11 备忘录模式的应用 950
49.12 使用备忘录模式的长处和短处 953
49.13 观世音甘泉活树的故事 953
第50章 状态(State)模式 963
50.1 引言 963
50.2 状态模式的结构 963
50.3 曾侯乙编钟的描述 965
50.4 状态模式的效果 966
50.6 在什么情况下使用状态模式 967
50.7 关于模式实现的讨论 967
50.8 一个状态模式的应用例子:TCP 968
50.9 状态模式在绘图软件中的应用 970
50.10 用户登录子系统 971
50.11 状态模式与策略模式的区别 977
第51章 专题:崂山道士与状态模式 981
51.1 有状态的墙 981
51.2 异常逻辑 981
51.3 从代码重构的角度考察 982
第52章 专题:单分派和多分派 987
52.1 分派的概念 987
52.2 双重分派 992
52.3 未来的Java语言 999
第53章 访问者(Visitor)模式 1005
53.1 引言 1005
53.2 访问者模式的结构 1007
53.3 系统的时序图 1013
53.4 在什么情况下应当使用访问者模式 1015
53.5 使用访问者模式的优点和缺点 1016
53.6 访问者模式的实现 1016
53.7 电脑专卖系统:问题与对象 1020
53.8 电脑专卖系统的访问者模式设计 1022
53.9 与访问者模式有关的模式 1038
第54章 解释器(Interpreter)模式 1041
54.1 引言 1041
54.2 解释器模式的结构 1042
54.3 一个示意性的实现 1043
54.4 有关模式 1053
第55章 调停者(Mediator)模式 1057
55.1 引言 1057
55.2 调停者模式的结构 1061
55.3 调停者模式的实现 1066
55.4 迪米特法则(LoD) 1066
55.5 调停者模式的优点和缺点 1067
55.6 调停者模式的使用条件 1067
55.7 与调停者模式有关的模式 1068