回忆下UML图

继承

 接口实现

 

 

接下来是类与类的关系(从弱到强)

倚赖(dependency):

类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的

简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。

在java中表现为:

1.局部变量

2.方法中的参数

3.对静态方法的调用

关联(association)

关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法
关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系。

Java中表现

1.使用实例变量

聚合(aggregation)

是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,即has-a关系(is-a是继承),此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;
比如计算机和CPU,公司与员工的关系;

与关联代码层面一致。

 

组合(compostion)

是关联关系的一种特例,体现的是一种contain-a关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。

与关联代码层面一致。
组合/聚合区别:

组合“部分”不能脱离“整体”单独存在,其生命周期应该是一致的。

聚合“部分”可以脱离“整体”单独存在,他们具有各自的生命周期。