合成/聚合复用原则(Composition/Aggregation Reuse Principle,CARP)是面向对象设计中的一个重要原则,旨在提高代码的可重用性和灵活性。它通常与继承复用原则相对立,强调通过组合或聚合而非继承来实现代码复用。
-
合成(Composition) :
- 在合成关系中,一个对象包含另一个对象,并且被包含的对象的生命周期由包含它的对象控制。即,包含对象负责创建和销毁被包含对象。
- 合成是一种强依赖关系,被包含对象不能独立于包含对象存在。
- 例如,一个
Car类可以包含一个Engine类的实例。Engine的生命周期完全依赖于Car的生命周期。
-
聚合(Aggregation) :
- 在聚合关系中,一个对象包含另一个对象,但被包含对象的生命周期是独立的。即,聚合对象不负责创建和销毁被聚合对象。
- 聚合是一种弱依赖关系,被聚合对象可以独立于聚合对象存在。
- 例如,一个
Team类可以聚合Player类的实例。一个Player可以不依赖于Team的存在,可以在不同的Team中出现。
-
聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
-
优先使用对象的合成/聚合将有助于保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。