我们学习设计模式,会碰到设计模式UML类图,但是其中的相关符号看不懂怎么办呢,需要我们对常见UML符号进行简单的归纳。
类之间关联图
人类属于动物,但是人会思考(think);人通过实现Swim,IFly接口,获得了游泳和飞翔能力;文学俱乐部是个由人组成的群体,每个成员都才华横溢;PeopleA是一位成功的气候学家,因此他了解天气的变化。

相关的修饰符
public ,private ,protected
public
用 + 表示
private
用 - 表示
protected
用 # 表示
相关的元素
类,接口,字段,方法
类
单个类图,一般分三层,第一层表示类的名称;第二层表示类的特性,通常就是字段和属性;第三层是类的操作,通常是方法或行为。
接口
接口类似单个类图也分三层,第一层表示接口的名称;第二层表示接口的特性,通常就是字段;第三层是接口的操作,通常是方法或行为。
表示方式有两种
- 顶部有 <>显示:如IFly接口
- 棒棒糖表示法:如Swim接口
字段
表示方式:修饰符 字段名:字段类型
例如:
- - name:String
- + sex:String
- # age:int
方法
表示方式:修饰符 方法名(参数类型 参数):返回值类型
例如:
- - think():void
- # work(int type): void
- + playGame(int type): String
相互关系
继承(extends),实现(implement),关联(Association),聚合(Aggregation),合成(Composition),依赖(Dependency)。
继承(extends)
继承有的文章使用泛化(Generalization)来表示。
定义:
- 接口与接口之间的继承关系
- 类与类之间的继承关系
表示方式:
带三角箭头的实线空心三角形,箭头指向父类

例子:人继承动物的相关特性

实现(implement)
定义:
- 类对接口的实现关系
表示方式:
带三角箭头的虚线,箭头指向接口

例子:人实现IFly接口,拥有飞翔能力

关联关系(Association)
定义:
- 是一种拥有的关系,它使一个类知道另一个类的属性和方法,当一个类‘知道’另一个类时,我们可以说它们之间相互关联;
- 双向关联:可以有两个箭头或者没有箭头(不推荐);
- 单向关联:有一个箭头,且箭头方向指向被关联的对象;
代码体现:成员变量
表示方式:
实线箭头,且箭头指向被拥有者

例子:如PeopleA了解天气变化

聚合(Aggregation)
定义:
- 一种弱的‘拥有’关系,体现的是 A 对象可以包含 B 对象,但 B 对象不是 A 对象的一部分;
- 整体与部分的关系,如文学俱乐部全体成员与文学俱乐部成员
代码体现:成员变量
表示方式:
带空心菱形的实心线,菱形指向整体

例子:文学俱乐部全体成员与文学俱乐部成员

注意关联关系和聚合关系的不同点:
- 关联关系所涉及的两个类处于同一个层次上;
- 聚合关系所涉及的两个类处于不平等的层次上(一个代表整体,一个代表部分)
合成关系(Composition)
定义:
- 一种强的‘拥有’关系,体现了部分与整体的关系,它们拥有相同的生命周期
代码体现:成员变量
表示方式:
带实心菱形的实线,菱形指向整体

例子:人由头、手等其它部分组成

依赖(Dependency)
定义:
- 依赖是单向的,通常以方法参数的形式、局部变量的形式,及对静态方法调用的形式出现
代码体现:方法参数,局部变量,静态方法
表示方式:
虚线箭头来表示

例子:动物依赖水,没有水就会失去生命

各关系的强弱顺序
继承=实现>组合>聚合>关联>依赖
类图XML文件
类的关联图(需要使用https://www.draw.io/打开)
参考资料
设计模式之基础篇UML(类图)
大话设计模式