重构 — 改善既有的类图设计 条款3:用 FACADE 类消除依赖关系的交叉
2008-05-08 12:38
423 查看
重构 — 改善既有的类图设计
条款3:用 FACADE 消除依赖关系的交叉
黄国强 2008/5/8
有 些网友对条款2不是很赞同,认为看惯了基类在上面,继承类在下面的图。认为还是原来的清晰。关于这点,我从两个方面解释一下。其一,在一个分层设计中,依 赖关系箭头一般都是从上指向下的,而基类在上面,继承类在下面的图正好和总体设计图相反。风格上并不统一。其二,一般静态结构图主要表现静态的结构,我个 人把一些动态因素也融合进去,需要这样的调整。也算是我的一点创新。
下面继续进行本系列的第三个条款。先看一个从真实的设计类图中提取出来的例子。为避免侵犯商业秘密,类名全部换掉了,前面的图也是基于类似原因起名。
图 1
图中大量的交叉关系让人很不舒服,不知道你的感觉如何。
改进图见图 2
图 2
图 2 中在原先的两个层次的多个类中插入了一个 FACADE 类,没有了交叉,这张图好看了很多。
解释一下:
从最简单的编程角度看,图 2 带来的好处是,处在两个层次上层类中无需保存多个下层类的指针。从而简化了调用关系。而且,随着项目的发展,我们可以很容易的用 FACADE 类将下层类对上层隐藏起来。FACADE 的详细解释可以参见设计模式的相关模式。
条款3:用 FACADE 消除依赖关系的交叉
黄国强 2008/5/8
有 些网友对条款2不是很赞同,认为看惯了基类在上面,继承类在下面的图。认为还是原来的清晰。关于这点,我从两个方面解释一下。其一,在一个分层设计中,依 赖关系箭头一般都是从上指向下的,而基类在上面,继承类在下面的图正好和总体设计图相反。风格上并不统一。其二,一般静态结构图主要表现静态的结构,我个 人把一些动态因素也融合进去,需要这样的调整。也算是我的一点创新。
下面继续进行本系列的第三个条款。先看一个从真实的设计类图中提取出来的例子。为避免侵犯商业秘密,类名全部换掉了,前面的图也是基于类似原因起名。
图 1
图中大量的交叉关系让人很不舒服,不知道你的感觉如何。
改进图见图 2
图 2
图 2 中在原先的两个层次的多个类中插入了一个 FACADE 类,没有了交叉,这张图好看了很多。
解释一下:
从最简单的编程角度看,图 2 带来的好处是,处在两个层次上层类中无需保存多个下层类的指针。从而简化了调用关系。而且,随着项目的发展,我们可以很容易的用 FACADE 类将下层类对上层隐藏起来。FACADE 的详细解释可以参见设计模式的相关模式。
相关文章推荐
- 重构 — 改善既有的类图设计 条款8:消除继承类和基类中重复的依赖关系
- 重构 — 改善既有的类图设计 条款4:消除重复的依赖关系
- 重构 — 改善既有的类图设计 条款14:将多个继承类对外部的依赖上移至基类
- 重构 — 改善既有的类图设计 条款12:消除聚合内部的返回参数的复制
- 重构 — 改善既有的类图设计 条款1:将双向依赖改变成单向依赖
- 重构 — 改善既有的类图设计 条款2:流水不争先
- 重构 — 改善既有的类图设计 条款6:模块的防火墙
- 重构 — 改善既有的类图设计 条款9:用Pimpl惯用法隐藏细节
- 重构 — 改善既有的类图设计 条款5:给工厂加一个代理
- 重构 — 改善既有的类图设计 条款13:用观察者模式来维护概念的完整性
- 重构 — 改善既有的类图设计 条款11:去除对聚合内部的引用
- 重构 — 改善既有的类图设计 条款15:区分基类和接口
- 重构 — 改善既有的类图设计 条款16:每个类只包含两个聚合箭头
- 重构 — 改善既有的类图设计 条款7:为每个角色增加一个接口
- 重构 — 改善既有的类图设计 条款10:将多个接口的实现类合并成一个
- 设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)
- 《重构--改善既有代码的设计》--处理概括关系(11)
- 重构-改善既有代码的设计:处理概括关系 (九)
- 重构-改善既有代码的设计:处理概括关系 (九)
- 重构-改善既有代码的设计:处理概括关系 (九)