SuperAPI AI 工具集

composition-over-inheritance

编程与开发

查看项目

更新于 10-16 02:27

技能介绍

用途:该技能用于类之间关系的设计,核心主张是“优先使用对象组合而非类继承”。当开发者想用 extends、创建类层级、或子类只需要父类部分行为时,应改用组合。

主要能力:给出继承的违规信号(代码中出现 extends、层级超过 2 层、子类覆写父类方法、需要多父类的“菱形问题”、子类用不到父类全部方法、修改父类破坏子类、难以在不实例化父类的情况下测试);说明继承的缺陷(紧耦合、层级僵化、被迫继承、脆弱基类)与组合的优势(灵活混搭、松耦合、易于测试、可运行时替换行为、无层级锁定)。

使用方式:将能力定义为接口(如 Flyable、Swimmable、Eatable),把可复用行为写成独立对象,再由类按需实现接口并注入行为。示例中 Duck 同时组合飞行、游泳、进食行为,Fish、Bird 各自组合所需行为。针对“这是 OOP 正统做法”“这是 is-a 关系”“想复用父类方法”“多态必须用继承”等压力,分别回应为:现代 OOP 更偏好组合;is-a 常会变成 has-a;提取共享行为为可组合单元;接口即可提供多态。

适用场景:类关系设计、需要用 extends 时、类需要来自多个来源的行为、构建类层级时。

限制与例外:资料强调“当组合可行时绝不使用继承”,默认组合;仅在真正的类型层级、框架强制要求(如 React 类组件)、扩展无法控制的库类时使用继承,且层级不超过 2 层。文中未提供安装命令、运行环境、收费或平台信息。