重构 — 改善既有的类图设计 条款10:将多个接口的实现类合并成一个
黄国强 2008-9-25
在 条款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 中多出来的接口函数是为一些授权等级更高的客户设计的。
按本条款重构的关键是,接口 A 和接口 B 有大量重复的接口函数。如果不符合此条件,就不能按此条款重构。
黄国强 2008-9-25
在 条款7中(http://acloudblog.blog.sohu.com/89393080.html)我们谈到“现实的例子,比如一个小公司,就老板一个人,他就要从事从总经理到员工所有的职位的工作。面对不同的客户,他拿出不同职位的名片。随着公司的发展,他会按职位招聘一些符合这些职位的人。让这些人分担他的职责。”
我这里有一个相反的例子。在这里例子中把多个实现合并到一个实现中。去除了很多重复的代码。
图一
图二
图二是重构后的图,重构的办法是将 C_B 取消,C_B 的实现改由 C_A 实现。结果少了很多重复代码。
按本条款重构的关键是,接口 A 和接口 B 有大量重复的接口函数。如果不符合此条件,就不能按此条款重构。