接上一篇文章: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会失去低频段,但是乐队失去了主音吉他大家可以想想那是什么情况呢?