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

 合成/聚合复用原则(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.优先使用对象组合,而不是类继承. 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值