概述

类与类之间都有哪些交互关系呢?UML 统一建模语言中定义了六种类之间的关系。它们分别是:泛化、实现、关联、聚合、组合、依赖。关系比较多,而且有些还比较相近,比如聚合和组合。

泛化(Generalization)实线空心箭头

泛化(Generalization)可以简单理解为继承关系。具体到 Java 代码就是下面这样:

  1. public class A { ... }
  2. public class B extends A { ... }

实现(Realization):虚线空心箭头

一般是指接口和实现类之间的关系

  1. public interface A {...}
  2. public class B implements A { ... }

聚合(Aggregation)

聚合(Aggregation)是一种包含关系,A 类对象包含 B 类对象,B 类对象的生命周期可以不依赖 A 类对象的生命周期,也就是说可以单独销毁 A 类对象而不影响 B 对象

  1. public class A {
  2. private B b;
  3. public A(B b) {
  4. this.b = b;
  5. }
  6. }

组合(Composition)

组合(Composition)也是一种包含关系。A 类对象包含 B 类对象,B 类对象的生命周期依赖 A 类对象的生命周期,B 类对象不可单独存在,比如鸟与翅膀之间的关系

  1. public class A {
  2. private B b;
  3. public A() {
  4. this.b = new B();
  5. }
  6. }

关联(Association)

关联(Association)是一种非常弱的关系,包含聚合、组合两种关系。具体到代码层面,如果 B 类对象是 A 类的成员变量,那 B 类和 A 类就是关联关系

  1. public class A {
  2. private B b;
  3. public A(B b) {
  4. this.b = b;
  5. }
  6. }
  7. 或者
  8. public class A {
  9. private B b;
  10. public A() {
  11. this.b = new B();
  12. }
  13. }

依赖(Dependency)

依赖(Dependency)是一种比关联关系更加弱的关系,包含关联关系。不管是 B 类对象是 A 类对象的成员变量,还是 A 类的方法使用 B 类对象作为参数或者返回值、局部变量,只要 B 类对象和 A 类对象有任何使用关系,我们都称它们有依赖关系

  1. public class A {
  2. private B b;
  3. public A(B b) {
  4. this.b = b;
  5. }
  6. }
  7. 或者
  8. public class A {
  9. private B b;
  10. public A() {
  11. this.b = new B();
  12. }
  13. }
  14. 或者
  15. public class A {
  16. public void func(B b) { ... }
  17. }

总结

只保留了四个关系:泛化、实现、组合、依赖。其中组合包含了聚合与组合。

UML备忘单

image.png