PlantUML画时序图,真香!-深圳网站优化推广公司
公众号矩阵
移动端
开发 开发工具
PlantUML是一个开源工具,它允许我们用简单的文本描述来创建UML图,包括序列图、用例图、类图、对象图、活动图、组件图、部署图、状态图,以及我们今天要讲的时序图。

引言

大家好,我是老三,最近在做系统设计的时候,发现要画不少时序图,以前我用的最顺手的工具是draw.io,后来也尝试了语雀自带的画图工具,感觉画画简单的图还行,但是复杂一点的,就比较吃力了。

图片图片

哎,这条线怎么又歪了?布局怎么又乱了?这个条怎么又对不齐了?……手忙脚乱才画好一张图,这时候我就想,有没有其它更专业的画图工具呢?大部分同事都在用Visio,辉哥给我推荐了PlantUML,说非常好用!这时候旁边来了一句—— “他就是装比!”

 还有这样的事?那我不能让他一个人都装了。

最开始看下官方文档,发现PlantUML类似MarkDown,似乎需要一点学习成本,简单用了一下,曲线还是挺平缓的,上手相当快!推荐大家也用一下试试。

一、什么是PlantUML?

PlantUML是一个多功能组件,可快速、直接地创建图表。用户可以使用简单直观的语言起草各种图表。

PlantUML是一个开源工具,它允许我们用简单的文本描述来创建UML图,包括序列图、用例图、类图、对象图、活动图、组件图、部署图、状态图,以及我们今天要讲的时序图。

图片图片

除了UML图之外,PlantUML 还支持一系列其他图表,例如JSON数据、YAML数据、EBNF图表、架构图等等。PlantUML的一大优势,是图表完全用文本代码描述,这就意味着它可以作为文档嵌入到源代码中,也非常方便版本控制和多人协作,不管是迭代设计、文档编写、系统建模,PlantUML都能胜任。

二、快速入门

PlantUML插件

为了便捷地使用PlantUML,许多流行的IDE和代码编辑器提供了集成PlantUML的插件,如Visual Studio Code、IntelliJ IDEA、Eclipse等。插件提供了实时预览、语法高亮和图表导出等功能,能帮助我们更快捷,更高效地画图,整体上IDEA的插件用起来体验最好,但是IDEA大家懂的,太占内存了,VS Code相对而言,用起来就会轻量很多。

  • IntelliJ IDEA:比如 "PlantUML integration" 可以让我们直接在 IDE 中查看和编辑 PlantUML 图表

图片图片

  • PlantUML integration

插件使用效果

图片图片

  • VS Code:https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml

插件市场:

图片图片

  • 插件使用效果:

图片图片

Hello World!

我们先来看个最简单的例子,通过-> 、-->和 :就可以在参与者之间传递消息,不用明确声明参与者。

@startuml
老张 -> 老王 : 老王,你好啊
老王--> 老张: 老张,你好啊

老张 -> 老王: 最近有空一起喝茶
老张 <-- 老王: OK
@enduml

图片图片

三、PlantUML时序图语法

接下来,我们看看PlantUML时序图的一些具体语法。

声明参与者

我们使用关键字participant 来声明参与者,就可以对该参与者进行更多的控制。声明的顺序就是默认的显示顺序。我们也可以用这些关键字来声明参与者,给参与者设置不同的形状。

  • actor(角色)
  • boundary(边界)
  • control(控制)
  • entity(实体)
  • database(数据库)
  • collections(集合)
  • queue(队列)

我们还可以通过 as关键字重命名参与者。

@startuml
participant Participant as Foo
actor       Actor       as Foo1
boundary    Boundary    as Foo2
control     Control     as Foo3
entity      Entity      as Foo4
database    Database    as Foo5
collections Collections as Foo6
queue       Queue       as Foo7
@enduml

图片参与者

默认的颜色比较单调,也可以通过#来设置参与者的颜色:

@startuml
actor Bob #blue
' The only difference between actor
'and participant is the drawing
participant Alice #SkyBlue
participant "I have a really\nlong name" as L #00ff00

Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml

上颜色的参与者上颜色的参与者

消息传递

在不同参与者之间,通过箭头+:来表示消息传递。

  • 同步消息:
A -> B: 同步消息文本

同步消息同步消息

  • 异步消息:由发送者A指向接收者B,表示A发送后不需要等待B立即处理。
A ->> B: 异步消息文本

异步消息异步消息

  • 返回消息:通常从接收者返回到发送者,标识一个回应。
A <-- B: 返回消息文本

返回消息返回消息

  • 自调用:一个参与者直接发送消息给自己,表示自我处理或运算。
A ->A: 自调用
  • 自调用

生命线(Lifeline)与激活条(Activation Bar)

在时序图中,生命线表示对象在一段时间内的活动状态,也就是从参与者往下延伸的那条虚线。激活条用来表示参与者或对象在处理某个任务期间的活动状态,是生命线的一部分,矩形条形式出现。

  • 生命线的激活与撤销:可以用下面这些关键字来控制生命线的激活与撤销

activate: 显示参与者的活动状态开始

deactivate: 指示参与者的活动状态结束。

destroy: 用于表示参与者的生命线终结,通常表示对象生命周期的结束。

@startuml
participant User
User -> A: DoWork
activate A
A -> B: << createRequest >>
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: RequestCreated
deactivate B
A -> User: Done
deactivate A
@enduml

生命线的激活与撤销生命线的激活与撤销

  • 生命线的嵌套与颜色:我们还可以使用嵌套激活条来表示内部调用,并可以给生命线添加颜色。
@startuml
participant User
User -> A: DoWork
activate A #FFBBBB
A -> A: Internal call
activate A #DarkSalmon
A -> B: << createRequest >>
activate B
B --> A: RequestCreated
deactivate B
deactivate A
A -> User: Done
deactivate A
@enduml

生命线的嵌套与颜色生命线的嵌套与颜色

  • 自动激活:在发送消息时自动显示激活条。
A->B++: 激活B并发送消息

自动激活自动激活

  • 自动去激活:在接收回应时自动隐藏激活条。
A->B++: 激活B并发送消息
A <--B--: B去激活并回应消息

自动去激活自动去激活

分组和替代

  • 分组:用于逻辑上分组一系列交互。
group 分组名
A -> B: 消息
...
end group

分组分组

  • 替代(Alt/Else):表示基于条件的替代执行流程。
alt 条件1
A -> B: 满足条件1的消息
else 条件2
A -> B: 满足条件2的消息
end

替代替代

注释

注释用于添加说明性文本。

  • 可以用note left of,note right of或note over来控制注释相对节点的位置,还可以通过修改背景色来高亮显示注释。
@startuml
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note

note right of Alice: This is displayed right of Alice.

note over Alice: This is displayed over Alice.

note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.

note over Bob, Alice
This is yet another
example of
a long note.
end note
@enduml

注释注释

颜色

Choosing colors在 PlantUML 中,我们可以对时序图的各个元素自定义颜色,比如参与者(actors)、对象(objects)、激活条(activation bars)等,来让我们的时序图更加美观。在声明元素时,可以直接指定颜色,格式为#颜色代码。颜色代码可以是不同的形式:

  • 直接指定颜色:颜色代码可以是一个十六进制颜色值,也可以是预定义的颜色名称。
@startuml
actor 用户  #Green
participant 参与者  #B4A7E5

用户-[#red]>参与者:消息
activate 参与者 #Blue

@enduml

直接指定颜色直接指定颜色

  • 使用 skinparam 设置颜色:除了直接为特定元素指定颜色外,还可以使用 skinparam 全局设置时序图中的颜色。用这种方式更改元素的默认颜色比较方便:
@startuml
skinparam ActorBorderColor #DarkOrange
skinparam ParticipantBackgroundColor #SkyBlue

actor 用户
participant 参与者
@enduml

使用 skinparam 设置颜色使用 skinparam 设置颜色

当使用 skinparam 时,我们可以设置许多不同属性的颜色,如边框颜色(BorderColor)、背景颜色(BackgroundColor)、字体颜色(FontColor)和激活条颜色(SequenceGroupBodyBackgroundColor)。更多语法可以直接查看官方文档:顺序图的语法和功能,目前这些内容,已经足够我们常见的时序图需求了。

四、完整实例

我们接下来看一个稍微完整一点的例子,在这个例子中,我们的需求,是要在原本的登录的基础上,引入Google登录。

@startuml
skinparam ParticipantBackgroundColor #DeepSkyBlue

actor 用户 as c  #DeepSkyBlue
participant "客户端" as client
participant "服务网关" as ga
participant "用户服务" as user
database "数据库" as DB  #DeepSkyBlue
participant "Google服务" as google  #LightCoral

activate c #DeepSkyBlue
activate client #DeepSkyBlue

c->client:用户登录

group#LightCoral #LightCoral Google登录客户端流程
  client -> google : 请求Google OAuth登录
            activate google #DeepSkyBlue
            google-->client:登录url
            client->google:跳转登录页
            google -> google : 用户登录
            google --> client : Google登录Token
            deactivate google
end

|||

client -> ga : 登录请求
note right#LightCoral:新增登录方式,三方登录请求实体
activate ga #DeepSkyBlue
ga ->user:请求转发
activate user #DeepSkyBlue


alt#DeepSkyBlue 常规登录
    user -> DB : 查询用户信息
    activate DB #DeepSkyBlue
    DB -> user : 用户信息
    deactivate DB
    user->user:登录密码校验

|||
else Google登录
    group#LightCoral #LightCoral Google登录服务端流程
          user->google:验证token
          activate google #DeepSkyBlue
          google-->user:用户信息
          deactivate google
          user->user:存储或更新用户信息
    end group
end


user-->ga:登录结果
deactivate user
ga -> client : 响应
deactivate ga
alt#DeepSkyBlue 成功
        client -> c : 登录成功
else 失败
        client -> c : 登录失败
end
deactivate client
|||
@enduml

登录时序图登录时序图

五、总结

PlantUML使用起来整体上还是非常舒服的,对我而言,这几个特点让我爱不释手:

  • 提供了类似MarkDown的所见即所得的使用体验,免去调整图形之扰
  • PlantUML本质是文本,可以进行版本控制,多人协同
  • 语雀支持文本画图的功能,可以嵌入PlantUML文本,支持在语雀文档里直接修改
责任编辑:武晓燕 来源: 三分恶
相关推荐

2010-06-10 09:32:21

UML时序图

2024-10-28 19:25:03

插件模板效率

2021-10-08 10:26:21

Java开源项目

2011-12-21 13:44:33

JavaJFreeChart

2010-07-01 15:12:34

UML时序图

2023-08-23 19:21:38

流程图时序图UML

2010-07-06 14:20:41

UML时序图

2010-07-01 14:25:31

UML时序图

2010-07-01 15:00:53

UML时序图

2010-07-01 14:04:23

UML时序图

2024-01-08 08:44:06

2023-05-08 08:11:49

@Component使用场景时序图

2010-06-10 16:09:45

UML协作图

2022-06-01 10:15:59

业务大图开发团队

2010-07-01 14:13:51

UML时序图

2010-07-12 13:09:05

UML协作图

2010-06-10 09:41:11

UML时序图

2021-03-19 07:07:03

Android 12Android系统谷歌

2010-06-29 11:16:02

UML画类图

2010-07-07 13:54:00

UML用例图
前端
27239内容
全部话题

同话题下的热门内容

Windsurf 和 Cursor ,为什么我选择CursorSpringBoot + MyBatis 拦截器轻松实现数据加减密Apache Tika 轻松实现各种文档内容解析一文带您了解SPC控制图:质量管理的核心工具推荐一个 Python 写的信息收集工具

相关专题 更多

2024年第十九届中国企业年终评选榜单揭晓
2024年第十九届中国企业年终评选榜单揭晓
如何发挥数据的最大力量?
如何发挥数据的最大力量?
2024-09-11 10:06:01
戴尔与AMD携手发布新一代服务器解决方案
戴尔与AMD携手发布新一代服务器解决方案
2024-12-24 16:34:07
我收藏的内容
点赞
收藏
分享

51CTO技术栈公众号

业务
速览
在线客服
媒体
51CTO CIOAge HC3i
社区
51CTO博客 鸿蒙开发者社区 AI.x社区
教育
51CTO学堂 精培 企业培训 CTO训练营

相关内容推荐

全景网站制作哪家好大连专业外文网站制作公司哪个公司制作企业网站ktv网站广告制作费用网页设计与制作网站总结承建网站制作手工房地产网站制作表格app咸宁市dw网页设计制作网站济南网站制作乚选山东聚搜网改图网站制作ppt瑞安坪山h5网站制作多少钱24小说网站制作影视广告制作网站大全怎样自己写程序制作网站丰都餐饮网站制作推荐外包网站制作流程网站制作合同审核ppt制作模板与素材网站生物医药网站制作哪里有论坛网站制作贴纸达州网站制作工作室网站制作公司的业务介绍广州网站制作哪家全面所有网站制作重庆网站制作干花文案淮安营销型网站制作零基础学网站制作流程重庆哪里制作网站制作文字链接网站制作传统美德网站诺亚舟网站制作壁纸厦门网站制作视频制作招生网站自行制作网站象山vr网站制作有哪些公司制作招生网站成都网站制作优秀乐云seo河北网站制作工具网站制作怎么在背景上加字陈玉莲电影网站制作制作家用网站观澜网站制作公司SONY网站制作头像邯郸网站制作方案阜新网络营销与网站制作推广公司青岛城阳网站制作培训清华大学网站制作壁纸影视制作投稿网站语音合成海报制作网站网站的制作部分如何写诸城网站H5制作dw8能否制作动态网站呢制作格子裙的网站全景网站制作找哪家高端网站的制作过程西藏网站制作价格壁画素材网站制作请人制作网站需要多少钱制作精细的h5游戏网站网站详情页傻瓜式制作制作一个二次元网站源代码贺州门户网站制作网站制作op丷云速捷模拟电视天线制作相关网站大全荣成模板网站制作榆林市网站制作行情涧西网站制作怎么选智能网站制作小玩具北京门户网站制作价格如何用手机制作一个小说网站南山英文网站制作哪家专业文档怎么制作网站黑龙江网站制作美食芦笋种子网站制作养老院网站制作起泡网站作业制作总结有没有专门制作网站的公司莲花外贸网站制作都有哪些凌源纹身网站制作头像制作网站王者荣耀阿里云个人网站制作承德网站制作官网淘宝网站设计作品怎么制作路桥网站建设制作正确网站制作方案怎样制作课程网站制作购物网站多少钱静态网站制作哪家质量好头像制作日本网站宜城制作网站封面制作用哪个网站无锡网站设计制作多少钱商品网站制作代码慈溪电商网站制作好吗邯郸网站制作服务商骨架模型网站制作简单网站制作图片水晶网站制作小玩具沃尔玛网站制作书签容桂网站制作价位网站的一般制作流程黔南企业网站制作一站式服务海淀区制作网站设计防水网站制作与开发排名情况即墨宣传型网站制作朝城网站制作价格抚州标书制作网站可以制作全景的网站简单网站 app制作软件鄂州网站制作视频素材男头像制作网站北京网站制作转化乐云seoh5预约表单制作网站芜湖响应式网站制作用dream网站制作流程深圳制作网站速成班无锡网站制作电话石碣网站制作外包网站设计制作用软件网站原始模板制作教程龙江照明网站制作固原制作网站公司石家庄天浩网站制作傻瓜网站制作壁纸软件阿里云速美站网站制作我所了解的网站制作技术网站的标识设计制作花都网站制作书签济南教育行业网站制作北京网站app制作简单网站展示内容制作代码普安网站制作加盟厦门市医保卡制作申请网站企业网站制作价格低长安网站制作优化动漫网站制作报告黑龙江会计网站制作东莞网站制作计划怎么制作汽车网站网站建设制作头像模板网站制作ppt彭水如何制作网站传奇版本库网站制作麻涌网站建设制作家具网站制作小玩具嗨曲网站制作制作网站web济南机票网站制作公司一折买书网站制作平湖如何制作主题资源网站模板常平企业网站制作什邡网站建设制作排名靠前的网站制作中心免费英文网站制作工具招标网站制作奶茶奇特电影网站制作美剧网站制作视频闪电优家网站制作价格制作影视头像网站如何制作生成功能的网站南昌电商网站制作临海如何制作一个刷题的网站网站制作客户注意事项江阴互联网vr制作网站网站制作和网站运营谁难发胶电影网站制作绵阳网站制作费用如何利用ps制作网站头像制作网站带子大字长春网站设计制作网站自适应网站制作多少钱免费制作快闪视频网站立春海报制作网站江门品牌网站制作选哪家网站建设 十佳制作制作网站的软件有什么本质电影网站制作慈溪制作微网站需要什么技能新视听网站制作蛋糕个人网站制作视频论文公交网站制作蛋糕直播动图网站制作天心区网站制作公司地址莆田网站视频制作YY网站制作视频成都电视台网站制作壁纸券妈妈网站制作瑞安免费制作网站北青旅网站制作视频奇特网站制作壁纸在哪个平台制作微网站曲靖网站制作投放c如何制作一个网站片头制作网站ae网页制作与网站建设资讯昆明制作网站公司简介MSN网站制作表情包h5网站制作平台有哪些制作有趣视频的网站网站制作去哪里学习

合作伙伴

深圳网站优化推广公司

龙岗网络公司
深圳网站优化
龙岗网站建设
坪山网站建设
百度标王推广
天下网标王
SEO优化按天计费
SEO按天计费系统