定义

尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。

聚合(has-A)、组合(contains-A)

优点

可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。

何时使用合成/聚合、继承

合成 contains-A

  • 动物由多个器官组成,丢失一部分整体就会无法使用。
  • 翅膀—>大雁

聚合 has-A

  • 整体由多个个体聚合而成,丢失一部分并不会对整体产生非常大的影响。
  • 大雁—>雁群

继承is-A

  • 相同类型但各有差异,将相同的属性抽取出来封装成父类,子类继承并新增独特属性。
  • 富士山苹果—>苹果—>水果

Composition/Aggregation Reuse Principle