聚合与组合的关系

一、概述

UML类图中的关系主要是(按照耦合度递增的顺序):

  1. 依赖
  2. 关联
  3. 聚合
  4. 组合
  5. 继承

聚合和组合从本质上讲都是同属于关联关系,但是在耦合度信息封装程度上有差异。

二、聚合和组合的类图

以网吧为例,一个网吧有多台电脑,一台电脑又是由很多的硬件+外设组成,所以他们的之间的关系大致如下图所示:

1. 聚合

聚合类图

反映在代码上就是:

public class InternetBar{
  private List<Computer> computers;

  public InternetBar(List<Computer> comps){
    this.computers = comps;
  }
}

2. 组合

组合类图

反映在代码上就是:

public class Computer{
  private Cpu cpu;

  public Computer(){
    this.cpu = new Cpu();
  }
}

三、差异比较

1. 代码层面

a. 聚合关系的类含有另一个类作为参数
网吧类(InternetBar)的构造函数只需要传入一个电脑的列表(List<Computer>),而这些个电脑可以独立于网吧而存在。

b. 组合关系的类含有另一个类的初始化
电脑类(Computer)的构造函数内部初始化了一个新的Cpu对象,这两个类紧密的偶合在一起,他们有相同的生命周期,Cpu类不能脱离Computer类单独存在。

2. 信息封装层面

a. 聚合关系中
客户端可以同时了解到网吧类和电脑类,他们彼此之间是独立的。

b. 组合关系中
客户端只能够识别电脑类,但无法知晓Cpu类的存在,因为Cpu类被严密地封装在Computer类中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。