首页/开发/代码质量与评审速查/组合优于继承(Favor Composition over Inheritance)
设计原则与模式62 条

组合优于继承(Favor Composition over Inheritance)

优先用组合与委托获得复用:继承把子类绑死在父类实现与接口上,组合可以运行期替换、只暴露需要的能力,是 GoF 在《设计模式》中给出的核心取向。

继承适合is-a 语义稳定、契约可完整继承
组合适合行为可插拔、复用为主
手段委托 + 接口,必要时用策略模式

对照

对照
// 继承:StrongExporter extends Compressor —— 压缩实现被绑死
// 组合:
class Exporter {
    private final Compressor compressor;
    Exporter(Compressor c) { this.compressor = c; }
}

易错点

  • 用组合但暴露全部被委托接口:等于换皮继承
  • 需要多态替换的封闭类型集合硬套组合:引入不必要的间接

数据来源与参考

  • 《设计模式:可复用面向对象软件的基础》(GoF)· 设计原则建议
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌