聚合与组合的关系

一、概述

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

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

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

二、聚合和组合的类图

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

1. 聚合

聚合与组合的关系_第1张图片
聚合类图

反映在代码上就是:

public class InternetBar{
  private List computers;

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

2. 组合

聚合与组合的关系_第2张图片
组合类图

反映在代码上就是:

public class Computer{
  private Cpu cpu;

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

三、差异比较

1. 代码层面

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

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

2. 信息封装层面

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

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

你可能感兴趣的:(聚合与组合的关系)