1. 开闭原则(OCP)的扩展性边界中通过继承 vs 通过组合的取舍
开闭原则(OCP)要求"对扩展开放、对修改关闭",实现该原则时应如何取舍继承与组合两种扩展方式?
- OCP 的核心定义
- 继承实现扩展的局限
- 组合/策略实现扩展的优势
OCP 指"对扩展开放、对修改关闭":软件实体应通过扩展新代码来应对变化,而不是修改既有代码。实现扩展有两种方式:继承(子类覆写方法)和组合(依赖注入行为/策略)。继承实现扩展简单,但有局限:耦合基类、易产生脆弱基类问题、层级深、无法在运行时动态改变行为。组合则更优——通过接口抽象 + 策略注入,把变化封装在可替换的策略中,新增功能只需新增一个实现类,不改既有代码,且支持运行时动态切换。因此现代实践更推崇"组合优于继承"作为 OCP 的落地手段。
OCP 的精髓是"把变化封装起来"。组合通过接口与策略把变化点抽离,使系统对新行为开放、对修改关闭。继承虽然也能实现扩展,但修改基类常波及子类,破坏"对修改关闭"。面试时点出"组合 + 接口抽象是 OCP 的主流实现"即可。