OOD设计原则之合成/聚合复用原则(CARP)

来源:互联网 发布:java有参的构造方法 编辑:程序博客网 时间:2024/05/16 19:27

 合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)也可以简称为合成复用原则(Composite Reuse Principle, CRP)。合成(Composition)和聚合(Aggregation)起司和都是对象建模中关联(Association)关系的的一种。聚合表示的是整体和部分的关系,表示“含有”,整体由部分组合而成,部分可以脱离部分作为一个独立的个体而存在。合成则是一种更强的“拥有”,部分组成整体,而且不可分割,部分不能脱离整体而单独存在。合成关系中,部分和整体的生命周期一样,合成的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。

合成/聚合和继承是实现复用的两个基本途径。假设我们已有一个类A,现在又一个新类B,想要复用A已经具有的功能,我们又两个方法:

方法一,可以通过组合或者聚合关系使A成为B的一部分,从而可以使用A的功能;

方法二,通过让B继承A,同样可以获得A已经具有的功能。那么,这两种方式孰优孰劣呢?

其实根据前面我们提到的其他OOD原则,也应当有一个基本的判断。我们前面提到过两点:面向接口(而不是实现)编程;类应该依赖于抽象而不依赖于具体。因此,方法二的继承关系会带来依赖性和耦合性方面的问题。

因此,合成/聚合复用原则简单的说,就是:尽量使用合成/聚合,而不是使用继承。

CARP最先是由谁提起的我无法考证,不过在GoF的经典著作《Design Patterns》中,是这样描述这条原则的:

Favor object composition over class inheritance.优先使用对象组合,而不是类继承. 

原创粉丝点击