回忆下UML图
继承
接口实现
接下来是类与类的关系(从弱到强)
倚赖(dependency):
类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的。
简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。
在java中表现为:
1.局部变量
2.方法中的参数
3.对静态方法的调用
关联(association)
关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法。
关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系。
Java中表现
1.使用实例变量
聚合(aggregation)
是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,即has-a关系(is-a是继承),此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;
比如计算机和CPU,公司与员工的关系;
与关联代码层面一致。
组合(compostion)
是关联关系的一种特例,体现的是一种contain-a关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。
与关联代码层面一致。
组合/聚合区别:
组合“部分”不能脱离“整体”单独存在,其生命周期应该是一致的。
聚合“部分”可以脱离“整体”单独存在,他们具有各自的生命周期。