首页/开发/代码质量与评审速查/手法:Replace Conditional with Polymorphism(以多态取代条件)
重构手法62 条

手法:Replace Conditional with Polymorphism(以多态取代条件)

按类型分支的行为分散在多个条件语句里时:为类型建立类层次,把分支下沉到各自实现;新增类型无需修改调用方,分支逻辑与类型绑定。

场景同一 switch/if 链在多处按类型分支
步骤建层次 → 工厂选择实现 → 分支下沉
前提类型集合相对封闭,行为差异显著

方向示例

方向示例
class Bird {
    double speed() { ... }
}
class EuropeanSwallow extends Bird { ... }
class AfricanSwallow extends Bird { ... }

// 调用方
return bird.speed();
语言支持时先用模式匹配评估:Java switch 模式、Rust enum + match 往往比类层次更直白。

易错点

  • 分支行为差异很小也建层次:抽象收益不足,类爆炸
  • 多态化后原分支的顺序逻辑丢失:条件求值顺序需保持

数据来源与参考

  • 《重构》第 2 版 · 第 10 章(Replace Conditional with Polymorphism)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌