之前介绍了一些UML图基础的概念,这次推荐一个快速绘制UML图的工具

绘制工具

在经历了一番折腾后,最终还是选择了 PlantUML,原因是看重其使用特有的语言书写接口,类,并自动生成UML. 同时,自己也在使用 VSCode ,发现 PlantUML 在 VSCode 上提供了插件,于是直接在 VSCode 上安装了 PlantUML的插件.
同时,要实时预览,还要安装 graphviz, 如果是 Mac,那么直接使用 homebrew 安装即可: brew install graphviz, 安装完成很后,使用 dot -v 查看是否安装成功

在 VSCode 中,使用 alt + d 进行实时预览

常用语法

类声明

  • 接口声明: interface 接口名
  • 抽象类声明: abstract class 类名
  • 类声明: class 类名
  • 注解类声明: annotation 注解名
  • 枚举类声明: enum 枚举类名

属性/方法修饰符

关系 符号
public +
protected #
default ~
private -

PlantUML用下面的符号来表示类之间的关系:

关系 符号 说明
实现 `< ..`
泛化 `< –-`
依赖 <.. Dependency, 带箭头的虚线表示
组合 *–- Composition, 带实心的菱形的直线表示
聚合 o–- Aggregation, 带空心菱形的直线表示
关联 <– Association
单向关联 <-- Association,带箭头的实线表示
双向关联 -- 直线表示
多重性关联 “1..*”<--"0..*" 关联直线上用一个数字或者一个数字的范围表示

一个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
@startuml

interface IUser

abstract class BaseUser
class User
class ShadowUser

IUser <|.. BaseUser
IUser <|.. ShadowUser
BaseUser <|-- User

interface IUserCenter {
+ IUser getCurrentUser()
+ boolean isLogin()
+ void queryUserProfile(int uid, string sid)
+ void search(int uid, string sid)
+ IUpdater updater(int uid, string sid)
}

class UserCenter {
- HostUserManager
- GuestUserManager
}

IUserCenter <|.. UserCenter


interface IUserManager {
void getUser(int uid, string sid)
void getProfile(int uid, string sid)
}

class HostUserManager {
- HostUserCache
- HostUpdater
}
class GuestUserManager {
- GuestUserCache
- GuestUpdater
}

IUserManager <|..HostUserManager
IUserManager <|..GuestUserManager

interface IUserCache {
+ void cacheUser(IUser user)
+ void deleteUser(int uid)
+ boolean hasUser(int uid)
}


class HostUserCache {
- SharedPreference sp
}
class GuestUserCache {
- HashMap cache
}
IUserCache <|..HostUserCache
IUserCache <|..GuestUserCache


interface IUpdater {
+ void setXXX(var xxx)
+ void update()
}
class HostUpdater
class GuestUpdater
IUpdater <|..HostUpdater
IUpdater <|..GuestUpdater

note top of IUpdater:主态update方法之后,需要拉取下User,客态update方法之后,直接设置回UserCache即可

UserCenter <-- HostUserManager
UserCenter <-- GuestUserManager

HostUserManager <-- HostUserCache
HostUserManager <-- HostUpdater

GuestUserManager <-- GuestUserCache
GuestUserManager <-- GuestUpdater


note as N1 #red
IUserCenter 作为User相关操作对外暴露的唯一对象
UserCache,UserManager 均为内部实现
end note

@enduml

参考连接