首页/开发/代码质量与评审速查/手法:Replace Subclass with Delegate(以委托替换子类)
重构手法62 条

手法:Replace Subclass with Delegate(以委托替换子类)

变体组合爆炸(类型 × 场景)时继承难以扩展:改为对象持有策略/委托字段,运行时组合行为;多态从编译期继承转移到运行期装配。

信号子类数量按维度相乘、行为组合多于继承关系
做法策略/委托字段 + 工厂装配
对比行为差异稳定的封闭集合可保留子类

示意

示意
// 之前:PremiumBooking + 周末场 + 团体票 → 子类爆炸
// 之后:booking.pricing = groupDiscount + weekendRule 组合

易错点

  • 委托对象生命周期失控:共享策略被就地修改
  • 装配逻辑散落各处:引入工厂集中创建规则组合

数据来源与参考

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