UML(统一建模语言)中的状态(State)建模,在描述对象的动态行为(特别是具有生命周期变化的对象)时非常重要。
这篇笔记将从基础概念 → 关键术语 → 状态图组成 → 实际开发场景 → Mermaid示例的角度系统讲解。

状态(State)的基本概念

在UML中,状态(State)指的是对象在其生命周期中、满足某种条件的一种情形。
简单理解:对象在不同时间点的“状态”不同,它的行为和响应也随之不同。
例如,在一个“订单(Order)”对象中:
  • 下单后是 “已创建(Created)” 状态;
  • 支付后变为 “已支付(Paid)”;
  • 发货后变为 “已发货(Shipped)”;
  • 收货确认后变为 “已完成(Completed)”。
这些状态变化由事件(Event)触发,并且可以附带条件(Guard)和动作(Action)。

状态图(State Machine Diagram / Statechart Diagram)

状态图描述的是:
某个对象在其生命周期中会经历哪些状态、在什么事件下发生状态转换、以及转换时可能执行哪些动作。
它常用于:
  • UI组件(如按钮、Activity)状态变化;
  • 网络连接状态;
  • 订单/任务/工作流等业务对象;
  • 设备或系统控制逻辑。

状态机(State Machine)的基本组成

元素
说明
示例
状态(State)
表示对象的一种条件或模式
“已登录”、“连接中”
初始状态(Initial State)
对象刚创建时的起始状态
一个实心黑点表示
终止状态(Final State)
对象生命周期结束的状态
一个带圆圈的黑点表示
转换(Transition)
从一个状态到另一个状态的连线
Created → Paid
事件(Event)
触发状态转换的条件
用户点击“支付”按钮
动作(Action)
状态转换时执行的行为
调用支付接口
守卫条件(Guard)
限制转换发生的条件
if(余额足够)

典型状态转换语法

用伪语法表示:
例如:
意思是:
在“Created”状态下,如果用户点击“支付”按钮并且余额大于0,就执行 callPaymentAPI(),然后转到“Paid”状态。

Mermaid 状态图示例(Android开发视角)

假设我们要描述一个Android Activity 的生命周期状态图。
这张图直观展示了 Activity 的生命周期变化与回调对应关系。
开发中,你可以用这种方式:
  • 理解系统回调顺序;
  • 明确某些逻辑代码应放在哪个状态(如初始化、释放资源等)。

再看一个业务示例:订单状态机

这个例子体现了业务状态流转:
  • 订单可以从“创建”直接取消;
  • 支付后才能发货;
  • 收货后才算完成;
  • 各状态转换可能附带动作(如调用接口、发送通知)。

实际开发中的应用技巧

场景
用途
建议
UI组件状态控制
例如按钮状态(可点击、加载中、禁用)
用状态机清晰描述交互逻辑
后台任务状态
下载、上传任务的流程管理
避免复杂的if-else逻辑
业务对象生命周期
订单、工单、审批流
状态流清晰可控
网络连接状态
连接中、已连接、失败、重连中
更易实现稳定逻辑

总结要点

  1. 状态机是行为建模的一部分,用于描述对象“如何随时间变化”。
  1. 状态图清晰展示事件驱动的逻辑,比流程图更关注“对象在何种状态下响应事件”。
  1. Mermaid 是非常适合UML学习和文档展示的语言,简单、直观、可嵌入。
  1. 设计建议:
      • 保持状态数量精简;
      • 避免过度建模;
      • 在业务复杂处使用“子状态机”或“复合状态”。
UML学习——状态图之复杂状态机UML学习——时序图