重构 — 改善既有的类图设计 条款10:将多个接口的实现类合并成一个
2008-09-25 14:42
447 查看
重构 — 改善既有的类图设计 条款10:将多个接口的实现类合并成一个
黄国强 2008-9-25[/b]
在条款7中(http://acloudblog.blog.sohu.com/89393080.html)我们谈到“现实的例子,比如一个小公司,就老板一个人,他就要从事从总经理到员工所有的职位的工作。面对不同的客户,他拿出不同职位的名片。随着公司的发展,他会按职位招聘一些符合这些职位的人。让这些人分担他的职责。”
我这里有一个相反的例子。在这里例子中把多个实现合并到一个实现中。去除了很多重复的代码。
图一
先看图一。在图一中,C_A 和 C_B 分别从接口 A 和接口 B 继承。C_A 和 C_B 都需要访问 C_Other 读取大量数据分别提供给接口 A 和接口 B 的使用者。这个具体例子中,接口 A 和接口 B 是为针对不同的授权而设计的。接口 B 是 接口 A 的子集,换句话说,接口 B 的接口函数在接口 A 中都有相似的存在。接口 A 中多出来的接口函数是为一些授权等级更高的客户设计的。
[align=center]图二
[/align]图二是重构后的图,重构的办法是将 C_B 取消,C_B 的实现改由 C_A 实现。结果少了很多重复代码。
按本条款重构的关键是,接口 A 和接口 B 有大量重复的接口函数。如果不符合此条件,就不能按此条款重构。
黄国强 2008-9-25[/b]
在条款7中(http://acloudblog.blog.sohu.com/89393080.html)我们谈到“现实的例子,比如一个小公司,就老板一个人,他就要从事从总经理到员工所有的职位的工作。面对不同的客户,他拿出不同职位的名片。随着公司的发展,他会按职位招聘一些符合这些职位的人。让这些人分担他的职责。”
我这里有一个相反的例子。在这里例子中把多个实现合并到一个实现中。去除了很多重复的代码。
图一
先看图一。在图一中,C_A 和 C_B 分别从接口 A 和接口 B 继承。C_A 和 C_B 都需要访问 C_Other 读取大量数据分别提供给接口 A 和接口 B 的使用者。这个具体例子中,接口 A 和接口 B 是为针对不同的授权而设计的。接口 B 是 接口 A 的子集,换句话说,接口 B 的接口函数在接口 A 中都有相似的存在。接口 A 中多出来的接口函数是为一些授权等级更高的客户设计的。
[align=center]图二
[/align]图二是重构后的图,重构的办法是将 C_B 取消,C_B 的实现改由 C_A 实现。结果少了很多重复代码。
按本条款重构的关键是,接口 A 和接口 B 有大量重复的接口函数。如果不符合此条件,就不能按此条款重构。
相关文章推荐
- 重构 — 改善既有的类图设计 条款7:为每个角色增加一个接口
- 重构 — 改善既有的类图设计 条款15:区分基类和接口
- 重构 — 改善既有的类图设计 条款8:消除继承类和基类中重复的依赖关系
- 重构 — 改善既有的类图设计 条款12:消除聚合内部的返回参数的复制
- 重构 — 改善既有的类图设计 条款13:用观察者模式来维护概念的完整性
- 重构 — 改善既有的类图设计 条款14:将多个继承类对外部的依赖上移至基类
- 重构 — 改善既有的类图设计 条款9:用Pimpl惯用法隐藏细节
- 重构 — 改善既有的类图设计 条款11:去除对聚合内部的引用
- 重构 — 改善既有的类图设计 条款6:模块的防火墙
- 重构 — 改善既有的类图设计 条款16:每个类只包含两个聚合箭头
- 重构 — 改善既有的类图设计 条款1:将双向依赖改变成单向依赖
- 重构 — 改善既有的类图设计 条款5:给工厂加一个代理
- 重构 — 改善既有的类图设计 条款2:流水不争先
- 重构 — 改善既有的类图设计 条款3:用 FACADE 类消除依赖关系的交叉
- 重构 — 改善既有的类图设计 条款4:消除重复的依赖关系
- 有效的使用和设计COM智能指针——条款10:尽量减少智能指针和接口指针的混用
- 重构改善既有代码设计--重构手法10:Move Method (搬移函数)
- [作业10-11]1.编写一个类立方体Cub,让其实现IEnumarable接口,细节是令其可以遍历迭代长宽高,并做一个客户代码验证。
- 设计一个Shape接口和它的两个实现类Square和Circle
- Java语言 设计一个动物声音“模拟器”(用接口实现)