【熟】代码美学:组合为何优于继承?

Prefer Composition Over Inheritance
这两件事是为了解决同一个问题——代码复用
继承的缺点在于子类和基类发生耦合

公共的部分 ->作为基类。
但是你很快就会发现特例需要修改
不通过继承来复用代码就是在组合
使用多个类进行组合
Re_use ; Extending, Using
Abstraction ;Parent Classes Interface
抽象可以复用代码,但不需要知道具体复用的是谁。拿到的是一个局部
继承 让使用者拿到某个类的实例,但是实际上传进来的是子类的实例;
一切都正常运作,但整体上都已经面目全非了。
默认的协议要求子类至少实现了这些方法
接口不像完整的类有各种方法和变量
给出了一份,对象的能力的协议。接口是最小化的。
08:08
将要用的东西以接口形式作为参数传进来
The Cons of Composition 缺点
需要初始化各种内部类型。大量的重复代码大量的包装方法。
组合可以减少对象之间的接触面。
减轻修改带来的摩擦力。
少量修改时继承会好用。但需要避免能直接访问的protected变量
显式创建需要重写且能访问的API
final/ sealed/private 密封methods方法被标记成避免不了解子类而修改出现bug
。