UML类图中聚合和组合的区别详解(含代码)

接上一篇文章:https://blog.csdn.net/HNUchaowang/article/details/108311858
说一句题外话,就是讨论一下为什么要去学习什么类图呢?要去理解这么多关系呢?
我觉得有如下两个作用吧:
第一,最实在的,程序员肯定少不了写设计文档,设计文档肯定包含类图;
第二,这个理解类与类之间的关系,是学习设计模式的基础。设计模式是什么,那就是相当于“降龙十八掌”和“独孤九剑”的武功秘籍啊,一招一式都是大佬多年来提炼的精髓。
话不多说,切入正题。

聚合(has-a)和组合(contains-a)都属于依赖关系 ,组合又称之为强聚合,从字面意思理解组合关系肯定比聚合关系的关联关系更强,没错,就是这样。

聚合
举一个简单的例子。比如 一个乐队(Class Band)通常由主音吉他,节奏吉他,低音吉他(Class Bass),架子鼓,键盘,萨克斯,等等组成。但是,很多街头乐队通常没有低音吉他,我把乐队和低音吉他之间的关系称之为聚合,代码如下:

Public Class Band
{
   private Bass bass;
   public Band(Bass bass)
   {
      this.bass = bass;
   }
}

组合
一个乐队如果没有主音吉他,那么这个乐队也就不叫乐队了,所以我称乐队(Class Band)和 主音吉他(Class Guitar)的关系为组合, 乐队和主音吉他的关系就相当于人和嘴巴的关系,你可以慢慢体会哈,这就是组合,代码如下:

Public Class Band
{
   private Guitar guitar;
   public Band()
   {
      guitar = new Guitar();
   }
}

聚合和组合区别:
从代码层面来看:两个的生命周期是不一样的,聚合可能被实例化也可能没有被实例化;而组合是一开始就被实例化了,随着宿主对象销毁而销毁;
从两两之间的重要性来看:
可以这么理解 贝斯对乐队的重要性 和 主音吉他对乐队的重要性,乐队没有了bass会失去低频段,但是乐队失去了主音吉他大家可以想想那是什么情况呢?

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值