设计模式 - 浅谈组合/聚合复用原则

组合/聚合复用原则

原则说明:组合/聚合复用原则(Composite/Aggregate Reuse Principle,CARP),尽量使用对象的组合/聚合关系达到代码复用的目的,而不是使用继承关系。

为什么要遵守该原则

该原则是为了让使系统更加灵活,降低类与类之间的耦合度,一个类的变化不会对其他类造成影响。其优点如下:

  1. 维护了类的封装性,因为成员对象的内部细节对于新对象不可见,因此这种复用又被称为 “黑箱”复用。
  2. 新旧类之间的耦合度低,新对象操作成员对象的唯一方法是通过操作成员对象暴露的接口。
  3. 复用的灵活性高,这种复用可以在运行期间动态进行,新对象可以动态引用与成员对象类型相同的对象。

示例

class Engine {
    // 引擎类
}

class Wheel {
    // 轮子类
}

class Car {
    private Engine engine;  // 聚合关系,汽车和引擎的生命周期可以不一致
    private Wheel wheel;    // 聚合关系,汽车和轮子的生命周期可以不一致

    public Car(Engine engine, Wheel wheel) {
        this.engine = engine;
        this.wheel = wheel;
    }
}

Car类Engine类Wheel类之间是聚合关系Car类EngineWheel的实例,但是EngineWheel的生命周期并不依赖于Car,它们可以独立存在。这样如果Engine类Wheel类发生变化,不会影响到Car类

总结

按照组合/聚合复用原则,我们在复用组件设计时,尽量使用组合/聚合关系进行复用,使用继承关系复用时,应该严格遵守里氏替换原则,必须满足 “IS-A” 关系的才能使用继承。

本文链接:

https://pugqq.com/archives/combinationaggregation-reuse-principle.html
设计模式 - 浅谈组合/聚合复用原则 - I/O
快来做第一个评论的人吧~

# 最近更新

JDK国内镜像加速下载2023-05-02

博客评论系统增加悄悄话/匿名留言模式2023-04-10

博客评论系统引入极验api2023-03-22

博客评论系统表情栏优化2023-02-04

centos用firewalld开放端口2022-08-12

数据结构与算法之红黑树2022-03-12

数据结构与算法之字典树2022-03-02

数据结构与算法之LSM树2022-02-24

数据结构与算法之B+树2022-02-15

数据结构与算法之堆2022-02-12