平行继承体系
概述
平行继承体系是代码异味的一种,指在一个继承体系中每创建一个子类,就需要在另一个继承体系中也创建相应的子类,形成相互依存的继承结构。
关键内容
- 特征识别:
- 在一个继承体系中创建子类,另一个体系也必须跟着创建对应子类
- 类名前缀相似(如DatabaseOrder、DatabaseProduct、XMLOrder、XMLProduct)
- 两个继承体系之间的类存在一对一的关系
-
继承层次紧密耦合
-
负面影响:
- 维护成本加倍,每次扩展需要维护两套继承体系
- 两个层次之间过度耦合
- 容易遗漏一边的修改
- 代码复杂度急剧增加
-
扩展性差
-
典型场景:
- 不同数据源的处理类(数据库版、XML版、JSON版)
- 不同渲染引擎的界面组件
-
不同协议的网络通信类
-
重构策略:
- Move Method:将方法移动到合适的类中
- Move Field:将字段移动到合适的类中
- 消除其中一个继承层次
- 使用组合替代继承
来源
- Martin Fowler — 《重构:改善既有代码的设计》
- 代码异味 — 重构指导书
相关
- 代码异味 — 平行继承体系所属的异味类别
- 重构 — 解决方法
- 继承 — 面向对象核心概念
- 组合优于继承 — 设计原则
- Move Method — 重构技巧