
类图(Class Diagram)
> 统一建模语言(UML)中最基础、最常用的结构建模图,用于描述系统的静态结构。
1. 核心定义
类图通过展示
类 | 接口 | 属性 | 操作 | 关系
来刻画面向对象系统的静态结构,是
- 可视化工具
- 设计蓝图
- 代码生成的直接依据
- 文档与沟通标准
2. 组成元素
元素 |
语法片段 |
说明 |
类 |
ClassName |
封装属性+操作的对象模板 |
接口 |
<<interface>> InterfaceName |
仅定义操作规范,无实现 |
属性 |
- name : Type [multiplicity] |
对象状态 |
操作 |
+ method(p : T) : R |
对象行为 |
关系 |
见下表 |
类与类之间的语义连接 |
3. 关系类型速查
关系 |
箭头/线 |
语义 |
示例 |
关联 |
A ── B |
长期知道/使用 |
学生 — 课程 |
聚合 |
A ◇─ B |
整体-部分(弱) |
大学 ◇— 学院 |
组合 |
A ◆─ B |
整体-部分(强) |
房子 ◆— 房间 |
继承 |
A △─> B |
一般/特殊 |
猫 △—> 动物 |
实现 |
A △-- B |
类实现接口 |
Service △-- Runnable |
依赖 |
A ···> B |
临时使用 |
参数、局部变量 |
4. 可见性符号
符号 |
可见性 |
语言关键字 |
+ |
public |
public |
- |
private |
private |
# |
protected |
protected |
~ |
package |
(default) |
5. 建模层次
- 概念层 – 业务领域实体(无技术细节)
- 说明层 – 系统职责与接口(分析)
- 实现层 – 接近代码(类型、可见性、方法签名)
6. 典型用途
- 面向对象系统设计(OOD)
- 数据库概念建模(可转 ER)
- 框架 / API 设计
- 代码逆向工程(生成图)
- 教学、文档、评审
7. 一句话总结
> 类图是面向对象系统的 “骨架图”,定义了谁由什么组成、如何协作,是连接需求、设计与代码的桥梁。
类图图示

车的类图结构为<>,表示车是一个抽象类;
它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
学生与班级之间是聚合关系,使用带空心箭头的实线表示;
学生与身份证之间为关联关系,使用一根实线表示;
学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;
对象图(Object Diagram)
> UML 结构建模图之一,描述系统在某一具体时刻(快照)存活的对象及其相互关系。
1. 核心定义
- 对象图是类图的实例化(Instance Level)。
- 展示 “此刻有哪些对象、对象的当前值、对象之间的链接”。
- 仅反映静态快照,不表达交互顺序;随系统运行而动态变化,因而生命周期有限。
2. 与类图的 3 句话对比
维度 |
类图 |
对象图 |
抽象级别 |
类型层(Type) |
实例层(Instance) |
内容 |
类、接口、属性模板、操作、关系 |
对象、属性当前值、链接 |
存在时间 |
设计期永久有效 |
运行期某一时刻快照 |
3. 组成元素
元素 |
语法片段 |
说明 |
对象 |
objectName : ClassName 或 :ClassName |
类的实例,可匿名 |
属性值 |
attribute = value |
对象在快照时刻的具体状态 |
链接(Link) |
实线 ─ |
实例级别的关联,称为 Link(类图是 Association) |
槽(Slot) |
属性-值对列表 |
存储在对象分栏内 |
4. 关系表示速查
关系 |
符号 |
语义 |
示例 |
链接 |
obj1 ── obj2 |
实例间引用/连接 |
alice ── cs101 |
继承实例 |
无特殊符号 |
通过对象类型隐式体现 |
:Cat 对象即 :Animal 的子实例 |
实现实例 |
同上 |
对象实现某接口 |
printer : Printable |
5. 可见性 & 多重性
- 无可见性符号(对象已封装,仅展示当前值)。
- 多重性在对象图中不出现(每个对象都是单个实例)。
6. 建模层次与用途
层次 |
目的 |
场景示例 |
分析 |
验证类图是否满足业务场景 |
“注册课程”快照:学生 alice 链接课程 cs101 |
设计 |
演示复杂数据结构在内存中的映像 |
树、图、链表某一时刻布局 |
测试 |
作为单元测试期望状态的可视化 |
执行某方法后对象图应如右图 |
7. 生命周期特点
- 只在系统运行的一段区间内有效;
- 可随调试器、日志、序列化数据捕获;
- 常被用作运行时验证类图设计的合理性。
8. 一句话总结
> 对象图是类图的 “快照”:把抽象模板具体化,让开发者在某一真实时刻看到活生生的对象与链接,用于验证、讲解与测试。
对象图图示

上面的对象图代表订单管理系统,顾客在一个特定的时间下单。它具有顾客、订单、特殊订单和一般订单四个对象。现在客户对象(C)是与三个订单对象(O1,O2和O3)。这些订单对象相关联的特殊订单和一般订单对象(S1,S2和N1)。顾客具有以下三个具有不同数目的订单(12,32和40),用于所考虑的特定的时间。
UML 组件图(Component Diagram)
> 又称构件图,描述软件系统物理的、可替换的、可部署的模块(组件)及其接口、依赖、组装关系,提供高层次架构视图与实现路标。
1. 核心定义
组件图展示运行时物理模块(如 DLL、JAR、EXE、微服务镜像)如何
- 实现和使用接口
- 通过端口与连接器组装
- 支持增量式开发、独立部署与热替换
2. 组成元素速查
元素 |
表示法 |
说明 |
组件(Component) |
<<component>> 矩形或「组件」图标 |
物理可替换模块,封装实现 |
接口(Interface) |
圆圈(供给)或半圆(需求) |
组件对外/对内契约 |
端口(Port) |
小正方形置于边界 |
组件的交互点,可命名 |
连接器(Connector) |
实线/装配链/委托链 |
端口-端口、组件-接口之间的运行时连接 |
关系(Relationship) |
依赖、装配、委托 |
见下表 |
3. 关系类型
关系 |
符号 |
语义 |
示例 |
装配(Assembly) |
●──○ |
需求接口连接到供给接口 |
OrderService ●──○ PaymentAPI |
委托(Delegation) |
实线+<<delegate>> |
把外部调用转发到内部组件 |
容器组件委托到子模块 |
依赖(Dependency) |
虚线箭头 |
编译/运行时依赖 |
WebApp ···> Logging.jar |
4. 层级化视图
- 黑盒 – 仅显示组件名与接口(对外可见)
- 灰盒 – 暴露端口与关键接口(架构评审)
- 白盒 – 展开内部子组件与连线(详细设计)
5. 典型用途
阶段 |
用途 |
架构设计 |
划分可执行/可部署单元,定义对外契约 |
任务分配 |
按组件切分团队/模块,明确依赖与接口责任人 |
构建脚本 |
指导 Maven/Gradle 模块、Docker 镜像划分 |
部署规划 |
映射到节点、容器、微服务拓扑 |
遗留系统 |
反向工程得到现有 JAR/DLL 依赖图 |
6. 与其他图的区别
图 |
关注点 |
类图 |
静态类型结构(类、继承、关联) |
组件图 |
物理模块划分与接口组装 |
部署图 |
节点/硬件上的实际部署位置 |
7. 一句话总结
> 组件图是 “物理拼装说明书”:它告诉开发者系统由哪些可替换的二进制构件构成,它们通过何种接口、端口与连接器协同工作,为增量交付、独立部署提供架构路标。
组件图图示

在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”。可以绘制网上商城组件图,如上图所示:购物车、订单、库存、支付管理组件。
UML 部署图(Deployment Diagram)
> 描述系统运行时刻的物理拓扑:有哪些节点(Node)、硬件配置、通信路径,以及软件制品(Artifact)如何部署到节点上。
1. 核心定义
- 唯一的一张静态部署视图(每个系统通常只维护一份)。
- 面向分布式、嵌入式、云原生环境,帮助架构师评估性能、容错、伸缩、安全等物理约束。
- 是运维、DevOps、自动化部署脚本的可视化输入。
2. 组成元素
元素 |
表示法 |
说明 |
节点(Node) |
<<device>> 立方体或 <<executionEnvironment>> 矩形 |
物理或虚拟计算资源(服务器、手机、传感器、容器、Pod) |
制品(Artifact) |
<<artifact>> 矩形+文档图标 |
可部署的物理单元:JAR、DLL、Docker 镜像、AI 模型、脚本 |
通信路径(Communication Path) |
实线 |
节点之间的网络连接,可标注协议与带宽 |
部署(Deployment) |
虚线箭头 ···> 或嵌套 |
制品“驻留”于节点 |
设备(Device) |
<<device>> |
硬件实体,如 EC2 裸金属 |
执行环境(Execution Environment) |
<<executionEnvironment>> |
软件容器,如 JVM、操作系统、Kubernetes |
3. 关系速查
关系 |
符号 |
语义 |
示例 |
通信路径 |
node1 ── node2 |
网络/总线连接 |
WebServer ──{HTTPS}─ DB_Server |
部署 |
artifact ···> node |
制品部署到节点 |
shop.jar ···> WebServer |
嵌套 |
节点内部放制品 |
物理包含 |
在 <<device>> RaspberryPi 内放置 firmware.bin |
4. 建模层级
- 纯硬件层 – 服务器、交换机、边缘设备
- 虚拟化层 – VM、容器、Pod、Runtime
- 应用层 – 制品(镜像、JAR、AI 模型)映射到以上资源
5. 典型用途
场景 |
价值 |
分布式架构评审 |
发现单点故障、网络瓶颈、数据亲和性 |
云迁移 |
评估上云粒度与成本(裸金属→VM→容器→Serverless) |
安全与合规 |
识别跨区/跨网段流量,满足等保/PCI-DSS |
自动化运维 |
生成 Ansible、Terraform、Kubernetes YAML 的“蓝图” |
嵌入式系统 |
确认固件烧录位置、CAN 总线连接 |
6. 与其他图的区别
图 |
关注点 |
组件图 |
软件模块的接口与组装 |
部署图 |
这些模块最终“跑在哪些硬件/虚拟节点上”以及“如何联网” |
7. 一句话总结
> 部署图是 “物理地图”:它告诉运维与架构师,软件制品最终驻留在哪台节点、通过什么网络、以何种协议协同工作,为分布式系统的性能、容错与自动化部署提供唯一且权威的静态拓扑视图。
部署图图示

UML 用例图(Use-Case Diagram)
> 以动态行为视角展示系统边界外可见的功能单元(用例),并刻画主角(Actor) 与这些 功能之间的需求关系,是需求捕获与沟通的核心入口。
1. 核心定义
- 描述系统 “做什么”(What),而非 “怎么做”(How)。
- 从外部观察者角度建立功能需求模型,为后续分析、测试、UI 原型提供契约。
- 是用户、客户、开发、测试四方对齐的“最小共识图”。
2. 组成元素
元素 |
表示法 |
说明 |
主角(Actor) |
火柴人图标 |
与系统交互的角色:用户、外部系统、硬件、时间触发器 |
用例(Use Case) |
椭圆 + 动宾短语 |
系统提供的可观测、可度量的业务功能 |
系统边界(System Boundary) |
矩形框 + <<system>> 名称 |
划定研究范围,框内=当前系统,框外=Actor |
关系(Relationship) |
见下表 |
描述 Actor↔用例、用例↔用例之间的合法交互 |
3. 关系类型速查
关系 |
符号 |
语义 |
示例 |
关联(Association) |
实线 |
Actor 参与用例 |
用户 ─ 下单 |
包含(Include) |
<<include>> 虚线箭头 |
公共/必 reused 行为 |
下单 ··> 检查库存 |
扩展(Extend) |
<<extend>> 虚线箭头 |
条件性、可选增强 |
支付 ··> 使用优惠券 |
泛化(Generalization) |
空心三角箭头 |
Actor 或用例的继承 |
会员 △─> 用户 |
4. 建模粒度层次
- 业务用例图 – 组织级视角,描述业务价值(如“获得贷款”)。
- 系统用例图 – 软件级视角,描述系统功能(如“提交贷款申请”)。
- 子功能用例图 – 对复杂用例再分解,辅助迭代规划。
5. 典型用途
阶段 |
价值 |
需求获取 |
快速捕获谁需要什么功能,避免“功能蔓延” |
范围界定 |
通过边界框明确 MVP 与二期功能 |
测试设计 |
每个用例可直接映射验收标准(Acceptance Criteria) |
UI 原型 |
用例→任务流→界面故事板 |
项目估算 |
用例点数(UCP)作为工期/成本输入 |
6. 最佳实践一句话
> “用例图是用户故事的‘鸟瞰版’:一个椭圆就是一张用户故事卡片,一条实线就是一次对话入口。”
7. 常见误区提醒
误区 |
正确做法 |
把步骤当用例 |
用例=目标,步骤应放到活动图/用例描述文本 |
出现 CRUD 四个椭圆 |
合并为“管理××”或用活动图展开 |
画成菜单树 |
用例应体现业务价值,而非 UI 层级 |
8. 一句话总结
> 用例图是 “需求雷达”:让所有人一眼看清谁(Actor) 通过什么功能(用例)与系统边界交互,为后续分析、设计、测试、交付提供可追溯、可验收的功能契约。
用例图图示

UML 序列图(Sequence Diagram)
> 又称时序图 / 顺序图,是一种行为动态图;
> 专注于时间维度,通过对象之间交换消息的严格顺序来可视化单个场景或用例控制流。
1. 核心定义
- 描述一组生命线上对象在某一用例/场景时间流中如何协作完成目标。
- 每条水平消息 = 一次调用或信号,对应类操作、状态机触发事件或异步信号。
- 属于动态建模,与活动图(控制流)、状态机图(对象状态)互补。
2. 组成元素
元素 |
表示法 |
说明 |
对象(Object) |
对象名:类名 矩形 |
交互实体,可为实例、组件、参与者 |
生命线(Lifeline) |
向下虚线 |
对象存在的时间区间 |
激活条(Activation Bar) |
细高矩形 |
对象正在执行某段代码或活动 |
消息(Message) |
水平箭头 + 文字 op(arg) |
交互单元,分同步、异步、返回、创建、销毁等 |
3. 消息类型速查
消息 |
箭头 |
语义 |
示例 |
同步调用 |
实心三角 + 实线 |
阻塞等待返回 |
calculateTotal() |
异步调用 |
开放三角 + 实线 |
立即继续 |
sendAsync() |
返回 |
虚线 + 开放三角 |
显式或隐式结果 |
← total:Money |
创建 |
«create» 虚线 |
实例化新对象 |
«create» :Order |
销毁 |
«destroy» 或 X |
生命周期结束 |
生命线底部打 X |
自消息 |
箭头折回自身 |
内部调用 |
validate() |
循环 / 可选 / 并行 |
交互框 alt/opt/loop/par |
组合片段 |
alt[amount>0] |
4. 常用组合片段(Combined Fragment)
操作符 |
用途 |
示例 |
alt |
多分支条件 |
alt [paid] / [unpaid] |
opt |
可选执行 |
opt [express] |
loop |
迭代 |
loop [for each item] |
par |
并行 |
par 线程1, 线程2 |
ref |
引用其他序列图 |
ref :AuthSubDiagram |
5. 建模步骤(最佳实践)
- 选一个用例或一个场景(如“下单”主成功路径)。
- 确定左侧启动者(Actor/边界对象)。
- 按时间顺序从左→右、上→下依次放置关键对象。
- 画出消息链,确保返回消息可省略以降噪。
- 对分支/循环使用组合片段,避免“瀑布”式长图。
- 与类图对照:每条消息应能在目标类中找到对应操作。
6. 典型用途
阶段 |
价值 |
需求分析 |
把用例文本转为可视化故事板,验证场景完整性 |
设计 |
精化类 public 方法签名,发现遗漏操作 |
测试 |
直接生成单元/集成测试用例(Given-When-Then) |
文档 |
为API、协议、时序敏感算法提供精确描述 |
调试 |
与日志时间戳对齐,快速定位调用链故障点 |
7. 与其他交互图对比
图 |
关注点 |
序列图 |
时间顺序(突出调用链) |
通信图(协作图) |
对象结构(突出连接拓扑) |
时序图(Timing Diagram) |
绝对时间/状态变化(实时系统) |
8. 一句话总结
> 序列图是 “交互电影胶片”:把对象当演员,消息当台词,按时间轴放映一次完整协作,让调用顺序、并发、分支、返回一目了然,为理解、设计、测试、调试提供精确动态脚本。
序列图图示

UML 协作图(Communication Diagram)
> 又名通信图,是交互图的一种,与序列图语义等价但视角不同:
> 突出对象间的空间结构(链接拓扑),弱化严格时间顺序,通过编号表达消息次序。
1. 核心定义
- 描述一组对象在某一用例/场景中如何通过现有链接交换消息完成协作。
- 属于动态建模,但图形式更接近类图的实例层(对象+链接)。
- 消息序号 = 唯一时间线索,可嵌套(1.1、1.2、1.2.1)。
2. 组成元素
元素 |
表示法 |
说明 |
对象(Object) |
obj:Class 矩形 |
交互实例,与序列图一致 |
链接(Link) |
实线 |
实例级别的关联,允许自反 |
消息(Message) |
带编号箭头 1: op(arg) |
沿链接传递的调用或信号 |
3. 消息编号规则
风格 |
示例 |
场景 |
顺序编号 |
1 → 2 → 3 |
简单线性流 |
嵌套编号 |
1 → 1.1 → 1.2 → 2 |
体现调用-返回层次 |
并行编号 |
1.1a / 1.1b |
并发分支(可选扩展) |
4. 与序列图快速对比
维度 |
序列图 |
协作图 |
焦点 |
时间顺序(生命线垂直) |
空间拓扑(对象布局自由) |
时间表达 |
几何位置(上→下) |
数字编号 |
链接显式 |
❌ 隐含 |
✅ 显式画出,可一眼看出对象间连接 |
适合 |
复杂算法、实时协议 |
对象网络、设计模式、结构验证 |
5. 建模最佳实践
- 先画对象与现有链接(可复用类图关联)。
- 从启动对象开始,沿链接依次标注编号+消息。
- 使用嵌套编号体现调用层次,避免箭头交叉过多。
- 对循环/分支可用
*[for each] 4: doX()
简短注解。
- 与序列图互为视图:结构疑问→协作图;时序疑问→序列图。
6. 典型用途
阶段 |
价值 |
设计评审 |
验证对象间链接是否足够支持用例 |
模式文档 |
展示 GoF 设计模式(如 Observer、Chain of Responsibility)的运行时对象网 |
逆向工程 |
从代码快速生成对象+调用链拓扑 |
教学沟通 |
让初学者一眼看清“谁连谁、谁调谁” |
7. 一句话总结
> 协作图 = “带消息编号的对象拓扑图”:用空间视角揭示对象如何通过现有链接协作完成场景,为结构验证、模式说明、代码走查提供清晰直观的动态蓝图。
示例:
keyPress(key) [key==ESC] / beep() ^ selfDestruct()
协作图图示

UML 活动图(Activity Diagram)
> UML 动态行为图之一,以“控制流+数据流”为核心,描述从活动到活动的流程、分支、并发与约束;
> 是状态图的流化特化,强调动作序列而非状态停留,广泛用于业务过程、用例实现、工作流、算法建模。
1. 核心定义
- 展示满足用例/业务目标所需各项活动及其执行顺序、条件分支、并行分叉、同步合并。
- 可嵌套调用其他活动(可重用子流程),也可引用对象节点表达数据流动。
- 天然支持并行识别与资源瓶颈分析,是流程再造、自动化编排、程序实现的直接输入。
2. 主要元素速查
元素 |
表示法 |
说明 |
初始节点(Initial Node) |
● 实心圆 |
流程唯一入口 |
活动(Activity) |
圆角矩形 动词+宾语 |
原子或分解的可执行单元 |
动作(Action) |
最小圆角矩形 |
不可再分的单步任务 |
控制流(Control Flow) |
实线箭头 |
执行顺序 |
对象流(Object Flow) |
虚线箭头 |
数据/对象在动作间传递 |
决策/合并(Decision/Merge) |
菱形 |
条件分支或多进单出 |
分叉/汇合(Fork/Join) |
粗黑条 |
并发分叉与同步汇合 |
泳道(Swimlane) |
矩形分区 |
按角色、部门、组件划分职责 |
终止节点(Activity Final) |
⊙ 牛眼 |
流程结束 |
发送/接收信号(Send/Receive Signal) |
五边形 |
事件驱动或异步交互 |
可中断活动区(Interruptible Region) |
虚线框 |
允许外部事件中断流程 |
扩展区(Expansion Region) |
虚线框+关键字 |
对集合元素批量处理 |
3. 控制节点与并发
场景 |
节点组合 |
价值 |
条件路由 |
Decision → [guard] → 分支 → Merge |
支持if-else/switch |
并行处理 |
Fork → 多分支 → Join |
识别可并行任务,优化吞吐量 |
循环 |
Merge → 决策 → [继续] → 活动 → Merge |
显式while/for |
4. 建模步骤(最佳实践)
- 选一条用例路径或业务流程(如“客户下单”)。
- 找出起点→主要活动→终点,列出业务动作动词。
- 按泳道划分责任人/系统组件,暴露跨部门等待点。
- 对并行任务使用
Fork/Join
,对异常/超时使用可中断区。
- 标注对象节点(订单、发票),验证数据一致性。
- 与序列图互补:活动图=流程全景,序列图=对象交互细节。
5. 典型用途
阶段 |
价值 |
业务分析 |
现状(As-Is) vs 未来(To-Be)流程可视化,发现冗余、等待、瓶颈 |
用例实现 |
把用例描述转为可实现的活动流,指导类/服务/微服务划分 |
工作流引擎 |
直接导出 BPMN / WF XML 可执行模型 |
并发设计 |
识别可并行路径,指导多线程、消息队列、事件驱动实现 |
算法教学 |
替代传统流程图,支持对象流+并发 |
6. 与其他图对比
图 |
关注点 |
状态图 |
状态中心(对象在某一状态停留) |
序列图 |
时间中心(对象间消息顺序) |
活动图 |
流程中心(动作序列、并发、数据流) |
7. 一句话总结
> 活动图是 “可并发的流程图++”:用活动节点+控制/数据流+分叉汇合+泳道,让业务、用例、算法、工作流的执行顺序、并行性、数据传递一目了然,为优化、自动化、编码提供可直接落地的流程蓝图。
活动图图示

UML 状态图(State Machine Diagram)
> 专用于描述单个对象(或子系统)在生命周期内因事件、条件、动作而转换状态的动态行为模型;
> 是 UML 对 Harel 状态机 的实现,可直接生成代码、用于嵌入式、UI、后端状态管理等场景。
1. 核心定义
- 刻画“对象在什么状态下”“收到什么事件”“满足什么条件”后“执行什么动作”并“进入下一状态”。
- 由 5 大核心元素构成:状态、转换、事件、活动、动作。
- 与活动图互补:状态图以状态为中心,活动图以流程为中心。
2. 五要素详解
要素 |
说明 |
示例 |
状态(State) |
对象满足某条件、等待某事件、执行某活动的有限时间段 |
Idle 、Connected 、Printing |
转换(Transition) |
源状态 → 目标状态的有向关系,附事件[条件]/动作 |
connect() [signal OK] / initialize() |
事件(Event) |
在时间/空间上对状态机有意义的** occurrence** |
信号、调用、时间到、异常、对象创建/销毁 |
活动(Activity) |
非原子、可中断的持续行为(do/ ) |
do / 加热到60℃ |
动作(Action) |
原子、不可中断的瞬时计算或副作用 |
entry / startMotor 、exit / logEvent |
3. 常用元素速览
元素 |
表示法 |
说明 |
初态(Initial) |
● 实心圆 |
唯一默认入口 |
终态(Final) |
⊙ 牛眼 |
生命周期结束 |
简单状态 |
圆角矩形 + 名称 |
无子结构 |
复合状态 |
嵌套状态图 |
支持层次化 |
并发区(Region) |
虚线分栏 |
同一级别并行状态 |
浅/深历史 |
H / H* |
记忆上次离开的子状态 |
转换字符串 |
事件(参数)[条件]/动作 |
例:doorClosed[timeout]/buzz() |
内部转换 |
状态内箭头 |
不离开当前状态:inc()/counter++ |
4. 转换标签完整语法
事件(参数) [守卫条件] / 效果动作 ^ 发送事件
示例:
keyPress(key) [key==ESC] / beep() ^ selfDestruct()
5. 建模步骤(最佳实践)
- 列出对象所有稳定状态(名词)。
- 找出触发状态变化的事件(动词/信号)。
- 补充守卫条件与动作/活动。
- 对复杂状态拆分子状态或并发区,避免“平面大饼”。
- 与类图对照:每个状态通常对应一组属性值;与序列图对照:事件来源自外部消息。
6. 典型用途
阶段 |
价值 |
需求分析 |
揭示对象生命周期规则与异常场景(订单取消、设备故障) |
设计 |
直接生成状态模式、switch-case、Spring StateMachine 代码 |
嵌入式 |
描述固件状态机,保证实时性与可预测性 |
前端/移动端 |
管理UI 状态流(加载、空数据、错误、刷新) |
测试 |
一条转换路径 = 一个测试用例,可自动生成状态切换表 |
7. 与其他图对比
图 |
关注点 |
活动图 |
流程/算法步骤(无明确状态停留) |
序列图 |
对象间消息顺序(不突出状态) |
状态图 |
单个对象状态变迁(以状态为中心) |
8. 一句话总结
状态图是“对象生命周期的故事板”:用状态=幕、事件=情节转折、动作=台词,让任何外部或内部刺激如何改变对象面貌一目了然,为代码、测试、运维提供可执行、可验证、可优化的动态行为契约。
状态图图示

注:部分图示摘自网络,仅作为个人学习使用。