重构 — 改善既有的类图设计 条款4:消除重复的依赖关系
2008-05-12 12:43
821 查看
重构 — 改善既有的类图设计
条款4:消除重复的依赖关系
黄国强 2008/5/12
图 1
见 图1。图中,类 A 因为调用了类 B ,所以有一条从类 A 指向类 B 的箭头。同时类 A 又调用了类 C ,所以有一根从类 A 指向类 C 的箭头。由于类 B 也有一根指向类 C 的箭头,所以为了消除重复的依赖关系,我们将类 A 指向类 C 的箭头去掉。重构后的设计见图 2。
图 2
解释一下,重构后的第一个好处就是图比以前跟简洁了。另外一个好处不太明显,根据迪米特法则。由于类 B 和类 C 是朋友,所以,发给类 C 的消息可以由类 B 转发。这样的设计将类 A 与类 C 的直接关系去除了。从而有利于未来的重构。
迪米特法则(Law of Demeter)的解释:
迪米特法则说的是一个对象应该对其它对象有尽可能少的了解。即只与你直接的朋友通信,不要跟陌生人说话。如果需要和陌生人通话,而你的朋友与陌生人是朋 友,那么可以将你对陌生人的调用由你的朋友转发,使得某人只知道朋友,不知道陌生人。换言之,某人会认为他所调用的是朋友的方法。
条款4:消除重复的依赖关系
黄国强 2008/5/12
图 1
见 图1。图中,类 A 因为调用了类 B ,所以有一条从类 A 指向类 B 的箭头。同时类 A 又调用了类 C ,所以有一根从类 A 指向类 C 的箭头。由于类 B 也有一根指向类 C 的箭头,所以为了消除重复的依赖关系,我们将类 A 指向类 C 的箭头去掉。重构后的设计见图 2。
图 2
解释一下,重构后的第一个好处就是图比以前跟简洁了。另外一个好处不太明显,根据迪米特法则。由于类 B 和类 C 是朋友,所以,发给类 C 的消息可以由类 B 转发。这样的设计将类 A 与类 C 的直接关系去除了。从而有利于未来的重构。
迪米特法则(Law of Demeter)的解释:
迪米特法则说的是一个对象应该对其它对象有尽可能少的了解。即只与你直接的朋友通信,不要跟陌生人说话。如果需要和陌生人通话,而你的朋友与陌生人是朋 友,那么可以将你对陌生人的调用由你的朋友转发,使得某人只知道朋友,不知道陌生人。换言之,某人会认为他所调用的是朋友的方法。
相关文章推荐
- 重构 — 改善既有的类图设计 条款8:消除继承类和基类中重复的依赖关系
- 重构 — 改善既有的类图设计 条款3:用 FACADE 类消除依赖关系的交叉
- 重构 — 改善既有的类图设计 条款1:将双向依赖改变成单向依赖
- 重构 — 改善既有的类图设计 条款14:将多个继承类对外部的依赖上移至基类
- 重构 — 改善既有的类图设计 条款12:消除聚合内部的返回参数的复制
- 重构 — 改善既有的类图设计 条款13:用观察者模式来维护概念的完整性
- 重构 — 改善既有的类图设计 条款10:将多个接口的实现类合并成一个
- 重构 — 改善既有的类图设计 条款6:模块的防火墙
- 重构 — 改善既有的类图设计 条款15:区分基类和接口
- 重构 — 改善既有的类图设计 条款5:给工厂加一个代理
- 重构 — 改善既有的类图设计 条款9:用Pimpl惯用法隐藏细节
- 重构 — 改善既有的类图设计 条款2:流水不争先
- 重构 — 改善既有的类图设计 条款16:每个类只包含两个聚合箭头
- 重构 — 改善既有的类图设计 条款7:为每个角色增加一个接口
- 重构 — 改善既有的类图设计 条款11:去除对聚合内部的引用
- 重构改善既有代码的设计-处理概括关系
- 重构改善既有代码的设计-处理概括关系
- 处理概括关系(读书摘要——重构改善既有代码的设计)
- 重构-改善既有代码的设计:处理概括关系 (九)
- 设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)