总结Java类关系



关系是指事物之间存在单向或双向的作用或者影响的状态。其中类与类之间要么有关系要么没关系,感觉这句话有点说的很无耻,谁都知道,但是其中奥妙在于很难确定类与类之间是否有关系。证明两个或者多个类是否存在关系涉及到业务、架构、模块边界的问题,然而由于业务模型的抽象角度不同而不同,确定他们是否有关系是一件很不简单的事情。
Java类有关系的6种情况
- 继承:extends【is-a】
- 实现:implements【can do】
- 组合:类是成员变量【contain-a】
- 聚合:类是成员变量【is-a】
- 依赖:是除了组合与聚合外的单向弱关系。比如使用一个类的属性、方法,或以其作为方法的参数传入,或以其作为方法的返回值输出【depends-a】
以上六种关系中继承和实现是很容易辨别的关系。但是在设计过程中要注意组合、聚合、依赖和关联这四个的区别。
继承
继承关系包括子类和父类、子接口和父接口之间。由空心菱形和实线箭头表示。

实现
实现关系包括一个类实现一个接口。由实线箭头表示。

组合
组合关系体现一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分的关系,但这种整体和部分是不可分割的,他们具有相同的生命周期。

聚合
聚合关系体现一种has-a的关系。整体和部分之间是可分离的,拥有各自的生命周期。 和组合关系的整体和部分关系不同的是:该整体包含很多个部分,但这里的部分都是相同的。

依赖
依赖关系是除了组合与聚合外的单向弱关系。比如使用一个类的属性、方法,或以其作为方法的参数传入,或以其作为方法的返回值输出。
