本系列文章主要参考自B站用户以诺爱编程的《设计模式》系列视频,以及王争的《设计模式之美》系列文章。
本文参考自30分钟学会UML类图。
UML图有很多种,一般只要掌握类图、用例图、时序图就可以完成大部分工作。本文算是学习设计模式的一道前菜,只介绍类图相关的知识。
一、类图中的基本元素
类图中的基本元素有具体类、抽象类、接口和包等。
1. 具体类
具体类用矩形框表示,矩形框分为三层:第一层是类名字。第二层是类的成员变量;第三层是类的方法。成员变量以及方法前的访问修饰符用符号来表示:
- “+”表示
public
; - “-”表示
private
; - “#”表示
protected
; - 不带符号表示
default
。
方法名的冒号后为返回值类型。
2. 抽象类
抽象类和具体类的表示方式类似,不同点在于抽象类的类名和方法名为斜体。
3. 接口
接口也用矩形框来表示,分为两层,第一层顶端用<<interface>>
标识为接口,第一层底端为接口名,第二层为接口的方法。
4. 包
包用以下图形表示:
二、类图中的关系
类图中的关系有实现关系、泛化关系、关联关系、依赖关系、聚合关系、组合关系这六种。
1. 实现关系
实现关系是指接口及其实现类之间的关系。在UML类图中,实现关系用空心三角和虚线组成的箭头来表示,从实现类指向接口。
2. 泛化关系
泛化关系是指对象与对象之间的继承关系,子对象“is a”父对象。泛化关系用空心三角和实线组成的箭头表示,从子类指向父类。
3. 关联关系
关联关系是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。关联关系的代码表现形式为一个对象含有另一个对象的引用。关联关系可以是单向关联,也可以是双向关联。双向关联关系用带双箭头的实线或者无箭头的实线双线表示。单向关联用一个带箭头的实线表示,箭头指向被关联的对象。
4. 依赖关系
依赖系是一种弱关联关系。如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系。即对象A “use” 对象B。依赖关系用一个带虚线的箭头表示,由使用方指向被使用方。具体代码表现形式为B为A的构造器或方法中的局部变量、方法或构造器的参数、方法的返回值,或者A调用B的静态方法。
5. 聚合关系
聚合是关联关系的一种特例,它体现的是整体与部分的拥有关系,即 “has a” 的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。聚合关系用空心菱形加实线箭头表示,空心菱形在整体一方,箭头指向部分一方。
6. 组合关系
组合也是关联关系的一种特例,它同样体现整体与部分间的包含关系,即 “contains a” 的关系。但此时整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也称为强聚合。