下面用「一张速查表 + 大量可运行案例 」把 UML 里最常用 的三张图(类图 / 时序图 / 活动图)彻底讲透。
每个案例都给出 PlantUML 源码 ,复制→粘贴到www.planttext.com/ 即可秒出高清矢量图,也能直接嵌入 Markdown / Confluence / PPT。
一、速查表:3 张图各自解决什么问题?
| 图类型 | 回答的问题 | 核心元素 | 记忆口诀 |
|---|---|---|---|
| 类图(Class Diagram) | 系统「长什么样」:有哪些类?各自职责?类之间怎么协作? | 类=三层方框(名字-属性-方法)+ 五种关系线 | "静态骨架" |
| 时序图(Sequence Diagram) | 对象之间「先说什么、后说什么」:消息按时间顺序怎么流动? | 生命线+箭头调用+激活条 | "动态对话" |
| 活动图(Activity Diagram) | 业务流程「怎么走」:if/else、并发、循环、异常怎么流转? | 圆角动作+菱形分支+黑棒同步 | "流程地图" |
二、类图:静态骨架(7 个案例)
- 类的"长什么样"------三层方框
plantuml
@startuml
class Student {
-id: Long
-name: String
+study()
}
@enduml

- 关联关系:一对一 / 一对多 / 多对多
plantuml
@startuml
class Order {}
class OrderItem {}
class Product {}
Order "1" --> "*" OrderItem : contains
OrderItem "*" --> "1" Product : refers
@enduml

- 聚合 VS 组合:生命周期强弱
plantuml
@startuml
class Car {}
class Engine {}
class Wheel {}
Car o-- Engine : 聚合(车报废引擎可再用)
Car *-- "4" Wheel : 组合(车销毁轮子也销毁)
@enduml

- 继承(泛化)(支付渠道例子)
plantuml
@startuml
abstract Payment {
+pay()
}
Payment <|-- Alipay
Payment <|-- WechatPay
@enduml

- 实现接口(Java 8 默认方法同理)
plantuml
@startuml
interface Flyable {
+fly()
}
class Bird {}
Flyable <|.. Bird : 实现
@enduml

- 设计模式:策略模式类图
plantuml
@startuml
interface DiscountStrategy {
+calc(price: BigDecimal): BigDecimal
}
DiscountStrategy <|-- VipStrategy
DiscountStrategy <|-- CouponStrategy
class OrderContext {
-strategy: DiscountStrategy
+execute(price: BigDecimal)
}
OrderContext --> DiscountStrategy : 使用
@enduml

- SpringBoot 三层架构(Controller→Service→DAO)
plantuml
@startuml
class UserController {}
interface UserService {}
class UserServiceImpl {}
interface UserRepository {}
class UserRepositoryImpl {}
UserController --> UserService
UserService <|.. UserServiceImpl
UserServiceImpl --> UserRepository
UserRepository <|.. UserRepositoryImpl
@enduml

三、时序图:动态对话(6 个案例)
- 基础语法:生命线+调用箭头+返回虚线
plantuml
@startuml
actor Alice
participant Bob
Alice -> Bob: hello()
Bob --> Alice: ok
@enduml

- 循环与条件(登录重试 3 次)
plantuml
@startuml
actor 用户
participant 前端
loop 3 times
用户 -> 前端: 输入密码
alt 密码正确
前端 --> 用户: 登录成功
break
else 密码错误
前端 --> 用户: 提示重输
end
end
@enduml

- 异步消息(AJAX 回调)
plantuml
@startuml
actor 浏览器
participant 前端JS
participant 后端
browser -> 前端JS: 点击提交
前端JS -> 后端: POST /api/async
前端JS --> browser: 立即显示"处理中"
后端 -> 前端JS: 回调结果
前端JS -> browser: 更新页面
@enduml

- Redis 分布式锁完整生命周期
plantuml
@startuml
actor 线程
participant Redis
participant MySQL
线程 -> Redis: SET lock uuid NX EX 30
alt 返回 OK
线程 -> MySQL: SELECT ... FOR UPDATE
线程 -> MySQL: UPDATE ...
线程 -> Redis: DEL lock
else 返回 nil
线程 -> 线程: sleep(0.1)
线程 -> Redis: 重试
end
@enduml

- 微服务 Feign 调用链(含熔断)
plantuml
@startuml
actor 用户
participant OrderService
participant StockService
participant Hystrix
OrderService -> Hystrix: 扣库存()
Hystrix -> StockService: POST /stock/reduce
alt 成功
StockService --> Hystrix: 200
else 失败 / 超时
Hystrix --> OrderService: 熔断返回fallback
end
@enduml

- 下单→支付→履约 全流程(跨 4 个域)
plantuml
@startuml
actor 用户
boundary 网关
control 订单中心
control 支付中心
database MySQL
queue 消息队列
control 库存中心
用户 -> 网关: POST /order
网关 -> 订单中心: createOrder()
订单中心 -> MySQL: insert
订单中心 -> 支付中心: createPayment()
支付中心 -> MySQL: insert
支付中心 -> 消息队列: PaymentSuccess事件
消息队列 -> 库存中心: 扣库存
库存中心 -> MySQL: update stock
@enduml

四、活动图:流程地图(5 个案例)
- 基本分支:电商下单
plantuml
@startuml
start
:创建订单;
if (库存充足?) then (yes)
:扣库存;
:支付;
if (支付成功?) then (yes)
:发货;
:完成;
else (no)
:取消订单;
:恢复库存;
endif
else (no)
:提示缺货;
endif
stop
@enduml

- 并行(Fork/Join):外卖下单后并行流程
plantuml
@startuml
start
:下单成功;
fork
:商家接单;
fork again
:骑手接单;
fork again
:系统通知用户;
join
:配送中;
:送达;
stop
@enduml
- 循环:审批驳回重提
plantuml
@startuml
start
repeat
:员工提交申请;
:经理审批;
if (通过?) then (no)
:驳回修改;
endif
repeat while (未通过)
:归档;
stop
@enduml

- 异常补偿:SAGA 事务
plantuml
@startuml
start
:下单;
:扣库存;
if (异常?) then (yes)
:补偿:恢复库存;
:补偿:关闭订单;
stop
endif
:支付;
:发货;
stop
@enduml

- 状态机风格:订单状态流转
plantuml
@startuml
title 订单状态机(活动图视角)
(*) --> "待支付"
"待支付" --> "已支付" : 支付成功
"已支付" --> "已发货" : 商家发货
"已发货" --> "已完成" : 确认收货
"待支付" --> "已取消" : 超时/主动取消
"已完成" --> (*)
@enduml
五、如何把图秒变 PPT / Confluence
- PlantUML 渲染 → 右键「下载 PNG/SVG」→ 拖进 PPT 即可矢量放大。
- Mermaid 代码块直接粘到 Typora / Notion / GitBook 实时预览。
- Draw.io 支持「链接到 GitHub 」:把
.puml文件存仓库,Draw.io 通过 URL 导入,自动同步更新。
六、一张脑图总结(保存即可)
类图 = 骨架 = 三层方框 + 关系线
时序图 = 对话 = 生命线 + 箭头 + 激活条
活动图 = 地图 = 圆角动作 + 菱形分支 + 黑棒并行
记住口诀 :
"类图看结构,时序看交互,活动看流程"------任何业务先问自己「我要看啥?」,再选图,3 分钟就能画出清晰架构。