vlambda博客
学习文章列表

设计模式第一谈:UML类间关系

在学习设计模式时,经常会阅读一些UML类图。所以,有必要在介绍设计模式之前,了解一下UML类之间关系以及每种关系的UML类图是啥样的。

UML类间关系有:

  • 依赖关系(Dependency)

  • 泛化关系(Generalization)

  • 实现关系(Realization)

  • 关联关系(Association)

  • 聚合关系(Aggregation)

  • 组合关系(Composition)

1、依赖关系

  • 描述:一个类的实现(或部分方法的实现)需要另外一个类的协助,是一种使用关系

  • 示例:对象A持有对象B的引用,对象A需要借住对象B的协助,假如A是一个类,那么B可以是局部变量、方法参数或者对静态方法的调用;用到了有B的部分方法就依赖了B

  • 符号:虚线+实线箭头,箭头指向依赖项

  • 类图:


2、泛化关系

  • 描述:指定了子类如何特化父类的所有特征和行为,是一种继承关系,表示一般与特殊的关系

  • 示例:B类和C类都有共同的父类:A类,A类是B类和C类的一种泛化

  • 符号:实线+空心三角剪头,箭头指向泛化类

  • 类图:

设计模式第一谈:UML类间关系


3、实现关系

  • 描述:一种类与接口的关系,类实现了接口的所有特征和行为

  • 示例:B类实现了A接口

  • 符号:虚线+空心三角剪头,箭头指向接口

  • 类图:

设计模式第一谈:UML类间关系


4、关联关系

  • 描述:

    • 一种特殊的依赖关系,表示类与类之间关系

    • 如果一个类,类中有成员变量,且成员变量是另外一个类,则它们之间就构成了关联关系

    • 关联关系就有导航性(双向关系或单向关系)、多重性(一对多,多对多)

  • 示例:A类中有B类实例作为成员变量

  • 符号:

    • 实心线+实线箭头,箭头指向被拥有者

    • 如果双向关系,可以为一条直线

  • 类图:

设计模式第一谈:UML类间关系


5、聚合关系

  • 描述:

    • 一种强的关联关系,表示是整体和部分的关系,整体和部分可以分开

    • 聚合关系的导航性(把A聚合到B,还是把B聚合到A)、多重性(A聚合一个B为单聚合,聚合多个B为多聚合)

    • 在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数传入

  • 示例:A类中有B类、C类实例作为成员变量,并且B类和C类可以从A类中分离出来

  • 符号:

    • 实线+实现箭头+空心菱形,菱形指向整体,箭头执行部分

    • 如果是多聚合,可没有箭头

  • 类图:


6、组合关系

  • 描述:

    • 也是一种整体和部分的关系,整体和部分不能分开

    • 组合关系也是关联关系,比聚合关系还要强,要求普通的聚合关系代表整体的对象管理代表部分的对象的生命周期

    • 代码实现组合关系时,通常在的构造方法中直接初始化代表部分的类

  • 示例:A类中有B类、C类实例作为成员变量,并且B类和C类不能脱离A类而单独存在

  • 符号:实线+实线箭头+实心菱形,菱形指向整体,箭头指向部分

  • 类图: