设计形式(Java)

设计模式(Java)

欢迎拍砖。


在讲授“信息系统分析与设计”课程的时候,需要介绍一些设计模式;又由于在[编程导论]出版过程中,清华大学出版社的魏江江主任给我寄来了两本设计模式方面的书籍,因而yqj2065决定将设计模式方面的知识全面梳理一番。


一旦以[编程导论]为思考平台,重审[GoF]和其他设计模式的书籍时,我非常惊讶地发现,十年前我非常崇拜的[设计模式]显得有些苍老和不堪。这是一种奇怪的感受。

 ①推导出常用的设计模式。
GoF在[设计模式•引言]中写道:“这本书的目的就是将面向对象软件的设计经验作为设计模式记录下来”。这种“记录”或者说归纳,对于广大程序员成功地共享设计经验作出了重大贡献。然而,将设计模式作为前辈的经验总结或者既定事实,对于学习设计模式,特别是能够灵活使用设计模式是一个错误的诱导。许多设计模式的学习者如同拿一本字典学习英语一样。本书的基本方法是从各种假定出发,通过重构源代码或者遵循设计原则的编写源代码,以获得设计模式。
虽然有点像作弊——知道最终结果的推导和证明,然而在推导的过程中,我们能够看到一个模式更多的变化、能够知道一个模式的优缺点/适应性、能够知道一个模式与其他模式的思路上的关联(而不是UML类图结构上的形似)。
②解释更清晰和简明。
这是站在巨人的肩膀上,对巨人的经典加以吹毛求疵。
以我对面向对象的认识,[设计模式]中有许多解释显得晦涩、不严密、甚至错误。一个典型的例子是[设计模式]使用回调/好莱坞法则解释模板方法模式(5.10),而在我看来,观察者模式则是回调/好莱坞法则的简单推论。[设计模式]对桥接模式(4.2)的解说非常难解。再例如,我认为备忘录模式(5.6)的技术要点是Memento对象必须是不变对象而与“封装性”没有太多的关系。
③补充常用的模式。如依赖注入等。
④...

草拟大纲如下:

第0章 引言 1
0.1
0.1.1何谓设计模式 1
0.1.2问题描述的形式 4
0.1.3本书的模板 5
0.2 面向对象编程范式 5
0.2.1柏拉图法则 6
0.2.2 Liskov原则 6
0.1.3 Parnas原则 6
0.3设计原则 6
0.3.1单向依赖原则 7
0.3.2抽象依赖原则 11
0.3.3最少依赖原则 17


第1章 创建型模式 19
1.1 new与反射 19
1.1.1 new表达式的局限 20
1.1.2 Class.newInstance() 22
1.1.3 配置文件 23
1.1.4 大变革 27
1.2依赖注入 29
1.2.1 注入的方式 30
1.2.2 IoC容器框架 31
1.2.3 更多… 36
1.3工厂模式 36
1.3.1简单工厂模式 36
1.3.2工厂方法模式(3.3) 41
1.3.3抽象工厂模式(3.1) 44
1.4装配厂模式 44
1.4.1伪建造者模式 45
1.4.2建造者模式(3.2) 48
1.4.3串接式setter模式 49
1.5原型模式(3.4) 55
1.5.1 结构分析 55
1.5.2 Java实现 56
1.5.3 深克隆 57
1.5.4案例 58
1.6零例、单例和对象池 59
1.6.1零例模式 59
1.6.2 单例模式(3.5) 60
1.6.3 多态的单例 62
1.6.4多例(Multiton)模式 68
1.6.5对象池 69
第2章 方法型模式 71
2.1空方法和Null对象 71
2.1.1空方法的作用 71
2.1.2 Null Object模式 72
2.2策略模式(5.9) 74
2.2.1封装算法 74
2.2.2方法对象化 76
2.2.3策略与多态 78
2.2.4小结 79
2.3模板方法模式(5.10)   续
2.4命令模式(5.2) 82
2.4.1乒乓球 82
2.4.2 双分派 83
2.4.3命令与执行 86
2.4.4评价 88

2.5 回调与观察者模式(5.7) 89

第3章 属性型模式 100
3.1虚域模式 100
3.1.1 案例 101
3.2享元模式(4.6) 101
3.2.1属性对象+对象池 101
3.2.2对象池 102
3.3状态模式(5.8) 102
3.3.1有限状态机 103

第4章 委派型模式 104
4.1小方法模式 104
4.2代理模式(4.7) 105
4.2.1保护型代理(protection proxy) 106
4.2.2动态代理(dynamic proxy) 106
4.2.3 Java RMI (Remote Method Invocation,远程方法调用) 106
4.3适配器模式(4.1) 106
4.3.1 转发的方式 107
4.3.2 适配器的变种 108
4.4桥接模式(4.2) 108
4.4.1替代多继承性 108
4.2.2桥接的作用 110
4.5装饰模式(4.4) 111
4.6外观模式(4.5) 111
4.7中介模式(5.5) 111

第5章 结构型模式 113
5.1责任链模式(5.1) 113
5.1.1经典责任链 113
5.2 组合模式(4.3) 114
5.2.1实现问题 114
5.3访问者模式(5.11) 122
5.3迭代器模式 122

第6章 目标型模式 143
6.1备忘录模式(5.6) 143
6.1.1 过程式实现 143
6.1.2 不变对象 144
6.2解释器模式(5.3) 150
6.2.1乘法解释器 150

第7章 回顾 178

附录 182
附录A 使用ArgoUML 182
附录B 模式映射表 185
附录C参考资料 186



最后编辑时间:2013.2.19