理解系统交互:UML时序图

时序图

时序图(Sequence Diagram),又名序列图,是一种交互图,它显示了进程如何相互操作以及操作顺序。

Mermaid画时序图

文档
在线画图

基本结构示例

客户端 服务器 登录请求 响应结果 客户端 服务器

text 复制代码
sequenceDiagram
    participant A as 客户端
    participant B as 服务器
    A->>B: 登录请求
    B-->>A: 响应结果

基本元素

  • 参与者: participant Aactor A,后加as添加别名,如:actor A as 小明
    • 在指令前添加 createdestroy 创建和销毁角色,如:create participant Carldestroy Carl
  • 消息:-实线,--虚线
    • 实线,无箭头: ->
    • 虚线,无箭头: -->
    • 实线带箭头: ->>
    • 虚线带箭头: -->>
    • 实线,有双向箭头 (v11.0.0+):<<->>
    • 虚线,有双向箭头 (v11.0.0+):<<-->>
    • 实线,末端带叉号:-x
    • 虚线,末端带叉号:--x
    • 实线,末端带开放箭头 (异步):-)
    • 虚线,末端带开放箭头 (异步):--)
  • 给每个箭头添加序列号:autonumber
  • 激活和停用框/角色: activatedeactivate
    • 还可以通过在消息箭头后附加 +/- 后缀来使用,如:
      Alice->>John: ... activate John 等同于 Alice->>+John:...
    • 对于同一个角色,可以重复激活,激活样式会堆叠表示
  • 注释: Note left of, Note right of, Note over则横跨2个参与者
    • 编辑器忽略内容型注释:以 %%(双百分号)为前缀
  • 换行:<br/>
  • 循环: loop [文本]
  • 条件分支: alt [文本]else [文本]
  • 可选路径: opt [文本]
  • 并行路径: par [文本],用and添加多个路径,可以嵌套
  • 添加分组/方框:box,box后加方框颜色,默认透明
  • 自动发生并带条件处理的操作:critical [文本],用option添加条件(可省)
  • 中断:break [文本]
  • 背景高亮:rect rgb(191, 223, 255)
  • 转义字符:格式类似这样#9829;
  • 给角色添加弹出式菜单添加链接:links actorname:{"链接名字":"链接"},可添加多个链接,点击角色弹出菜单显示

注意 :像循环、分支、方框类会换行的元素,最后面需要加end结束。

复杂时序图示例

小明 抖音 服务器 数据库 小明起床刷手机 启动应用 请求认证 查询用户 返回用户数据 认证成功 显示仪表板 小明美滋滋 认证失败 显示错误 小明哭唧唧 alt 用户有效 用户无效 频繁请求 一直响应 loop 每分钟 小明间接和系统服务器、数据库交互 小明 抖音 服务器 数据库

text 复制代码
sequenceDiagram
    actor 用户 as 小明
    participant 客户端 as 抖音
    participant 服务器
    participant 数据库

    Note left of 用户: 小明起床刷手机
    用户->>客户端: 启动应用
    activate 客户端
    
    客户端->>服务器: 请求认证
    activate 服务器
    
    服务器->>数据库: 查询用户
    activate 数据库
    数据库-->>服务器: 返回用户数据
    deactivate 数据库
    
    alt 用户有效
        服务器-->>客户端: 认证成功
        客户端-->>用户: 显示仪表板
	    Note right of 用户: 小明美滋滋
    else 用户无效
        服务器-->>客户端: 认证失败
        客户端-->>用户: 显示错误
	    Note right of 用户: 小明哭唧唧
    end
    rect rgb(191, 223, 255)
	    loop 每分钟
	        用户->>客户端: 频繁请求
	        客户端-->>用户: 一直响应
	    end
    end
    
	Note over 用户,数据库: 小明间接和系统服务器、数据库交互
    
    deactivate 服务器
    deactivate 客户端

PlantUML画时序图

功能较多,语法复杂点,效果更灵活,效果示例如下,有需要可以深入了解一下
文档
在线画图

复杂图示例

text 复制代码
@startuml
' 设置标题和页脚
title PlantUML 时序图综合示例
footer 包含所有核心元素用法

' 定义参与者(多种类型)
actor 用户 as User #blue
participant "客户端" as Client
control "服务控制器" as Service
entity "数据库" as DB
database "缓存系统" as Cache
collections "消息队列" as MQ
boundary "API网关" as Gateway

' 初始消息
User -> Gateway : 提交请求
activate Gateway

' 分组示例
group 认证流程
    Gateway -> Service : 验证请求
    activate Service #LightBlue
    
    ' 条件分支
    alt 验证成功
        Service -> DB : 查询数据
        activate DB #LightGreen
        DB --> Service : 返回结果
        deactivate DB
    else 验证失败
        Service -->> User : 返回错误
        deactivate Service
        return
    end
end

' 创建新对象(正确用法)
create Service
Gateway -> Service ** : 创建服务实例
activate Service

' 异步消息
Service ->> MQ : 发布事件
activate MQ #FFFFCC

' 激活嵌套
Service -> Service : 内部处理
activate Service #CCCCCC
Service --> Service : 完成
deactivate Service

' 循环分组
loop 3 次重试
    Service -> Cache : 获取缓存
    activate Cache #FFD700
    Cache --> Service : 返回空
    deactivate Cache
end

' 注释示例
note over User, Client : 用户交互区域
note right of MQ : 异步消息系统\n解耦处理
note left of Service
  **服务控制器职责**:
  1. 请求路由
  2. 数据处理
  3. 错误处理
end note

' 延迟标记
Service --> Client : 处理中...
... 网络延迟 ...
Client -> User : 请等待

' 返回消息
Service <-- Cache : 缓存响应

' 生命线结束
destroy Service
Gateway --> User : 最终响应

' 自动编号
autonumber
Service -> DB : 保存日志
DB --> Service : 确认保存
autonumber stop

' 分组颜色
group #LightPink 清理资源
    Service -> Cache : 清除临时数据
    Service ->> MQ : 发送清理事件
end
@enduml
相关推荐
明航咨询—张老师31 分钟前
软件工程造价师认证实战应用与职业价值指南
大数据·证书·软件工程·it
一路往蓝-Anbo3 小时前
第九章:OTA 与 Flash 驱动 —— 如何用TDD验证固件升级逻辑的鲁棒性
stm32·单片机·嵌入式硬件·软件工程·tdd·ota·嵌入式测试驱动开发
数字时代全景窗3 小时前
商业航天不是航天的分支,而是产业革命本身
架构·软件工程
vensli3 小时前
消息跨端架构演进:基于 C++ 的多端一致性研发框架实践
java·人工智能·软件工程·安卓
前端不太难4 小时前
从语言生成到世界交互:AGI的具身化演进之路
状态模式·交互·agi
@insist1234 小时前
系统架构设计师-软件架构核心概念与描述方法
系统架构·软件工程·软考·系统架构设计师·软件水平考试
workflower19 小时前
具身智能研究对象:物理交互中的智能行为
设计模式·动态规划·软件工程·软件构建·scrum
Ulyanov1 天前
深入QML-Python通信 构建响应式交互界面的桥梁设计:QML+PySide6现代开发入门(五)
开发语言·python·算法·交互·qml·系统仿真
郝学胜-神的一滴1 天前
Qt 高级开发 019:从零定制登录窗口按钮、Logo 样式与交互悬浮效果
开发语言·c++·qt·程序人生·交互·用户界面
sir56565561 天前
自媒体配图怎么做高级感带壳截图
软件工程