首页/开发/代码质量与评审速查/手法:Remove Subclass / Replace Subclass with Delegate(撤销子类)
重构手法62 条

手法:Remove Subclass / Replace Subclass with Delegate(撤销子类)

子类的差异只剩数据或极少量分支时,撤销子类后用字段、枚举或委托表达:类数量减少、结构更直白;先确认没有以类型身份参与多态分派的逻辑。

信号子类只改构造或单个方法、分支旋钮是数据
做法字段/枚举替代、或改为委托对象
前提无外部按类型判断的代码

示意

示意
// 之前
class Engineer extends Person { ... }
// 之后
class Person { String role; }

易错点

  • 外部代码仍按子类类型判断:撤销前先全局检索
  • 序列化依赖类名:改类结构需评估存储与兼容

数据来源与参考

  • 《重构》第 2 版 · 第 12 章(Remove Subclass)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌