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

组合/聚合复用原则

原则说明:组合/聚合复用原则(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
2 评论
    kznnhgedegSogo BrowserWindows 10
    11月30日 回复

    你的文章内容非常精彩,让人回味无穷。 http://www.55baobei.com/O63R3ipWjn.html

    zxqogriueoSogo BrowserWindows 10
    11月26日 回复

    《永不放弃》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/59184.html

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21