设计 - 避免使用继承

  1. 继承破坏了层次

继承破坏了层次

无论我们使用的是继承,还是组合,都会涉及层次。当调用关系相当简单时,不存在所谓破坏。

而一旦父类中存在复杂的调用关系时:

我们看到原本 Parent class 的 method-1 调用 method-2,当存在继承时候,method1 实质上调用的是 Child class 的 method-2,这里存在以下问题:

  1. 设计应该遵循简单优先。此处则指代,层次依赖应该是单向的。
  2. 继承所产生的动态性是不可见的。动态性是指 Parent class 的 method-1 调用的可能不是自己的 method-2,可能是 Child class的,也可能是 Child class 的 Child class 的。这种动态没有清晰的标注、程序员间的共识,大多数人不会发现它(动态性)的存在,因此可认为不可见。不可见不代表不存在,因此会造成隐患。