继承, 是面向对象编程的主要特性之一, 但是行业实践去推荐组合优于继承.
- 为什么不推荐使用继承呢?
- 组合相对于继承有哪些优点呢?
- 何时该使用组合或者继承呢?
打卡
打卡11:
今天学习: 设计模式10课, 组合优于继承
收获: 理清了继承与组合的作用, 以及两者之间的优缺点.
继承, 强调 is-a 的关系, 支持多态调用, 使得代码复用; 但是层次太深的继承关系会使得代码变得复杂, 父类与子类之间存在高耦合, 代码难以维护.
使用组合的思想, 当对象之间关系复杂时, 组合, 接口和委托三者结合起来能够很好地代替继承, 从而减少继承所带来的代码可维护性差的缺点:
- 组合 + 接口, 强调 has-a 关系, 代替 is-a 关系;
- 接口, 也能够支持多态调用;
- 组合 + 委托, 也能够实现代码复用;
但是使用组合, 也意味着对代码做细粒度的拆分, 副作用是会生成更多的类和接口.
继承和组合都要各自的使用场景:
- 谨慎使用继承, 当类与类之间包含 is-a 关系, 继承关系不复杂且稳定的时候, 可以优先使用继承;
- 其他情况下, 则优先使用组合.