美文网首页
聚合与组合的关系

聚合与组合的关系

作者: 汉寿周杰伦 | 来源:发表于2020-05-07 11:37 被阅读0次

    一、概述

    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类中。

    相关文章

      网友评论

          本文标题:聚合与组合的关系

          本文链接:https://www.haomeiwen.com/subject/crmoghtx.html