UML类关系

设计模式之依赖、关联、聚合、组合关系的区别与联系。

泛化关系

对于面向对象编程语言,UML 中所说的泛化关系(Generalization)就是指类的继承关系。

如果一个类是另一个类的子类,那么 UML 通过使用一个实线连接两个类的 UML 图来表示二者之间的继承关系,实线的起始端是子类,终点端是父类,终点端使用一个空心的三角形表示实线的结束。

generalization

实现关系

如果一个类实现了一个接口,那么类和接口的关系是实现关系(Realization)。

UML 通过使用虚线连接类和它所实现的接口,虚线的起始端是类,终点端是它实现的接口,终点端使用一个空心的三角形表示虚线的结束。

realization

依赖关系

如果 A 类中 某个方法的参数 用 B 类来声明的变量或某个方法返回的数据类型是 B 类型的,那么 A 和 B 的关系是依赖关系(Dependency),称 A 依赖于 B。

在 java 中,依赖表现为:局部变量,方法中的参数和对静态方法的调用。

如果 A 依赖于 B,那么 UML 通过使用一个虚线连接 A 和 B,虚线的起始端是 A,终点端是 B,终点端使用一个指向 B 的方向箭头表示虚线的结束。

dependency

关联关系

如果 A 类的成员变量是用 B 类来声明的变量,那么 A 和 B 的关系是关联关系(Association),称 A 关联与 B。

在 Java 语言中,关联关系一般使用成员变量来实现。

如果 A 关联与 B,那么 UML 通过使用一个实线连接 A 和 B,实线的起始端是 A,终点端是 B,终点端使用一个指向 B 的方向箭头表示实线的结束。

association

聚合关系

聚合(Aggregation)关系是关联关系的一种,是整体和个体之间的关系,如雁群和大雁的关系,即 has-a 关系。

在聚合关系中,两个类时处在不平等层次上的,一个代表整体,一个代表个体。

在 Java 中,与关联关系一样,聚合关系也是通过成员变量实现的。

aggregation

组合关系

组合(Composition)关系是关联关系的一种,是整体与部分的关系,这里的整体与部分是不可分的,如大雁和翅膀的关系,即 contains-a 关系。

composition

耦合度强弱

耦合度由弱至强:

依赖关系 < 关联关系 < 聚合关系 < 组合关系