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逻辑 |
业务对象生命周期 | 订单、工单、审批流 | 状态流清晰可控 |
网络连接状态 | 连接中、已连接、失败、重连中 | 更易实现稳定逻辑 |
总结要点
- 状态机是行为建模的一部分,用于描述对象“如何随时间变化”。
- 状态图清晰展示事件驱动的逻辑,比流程图更关注“对象在何种状态下响应事件”。
- Mermaid 是非常适合UML学习和文档展示的语言,简单、直观、可嵌入。
- 设计建议:
- 保持状态数量精简;
- 避免过度建模;
- 在业务复杂处使用“子状态机”或“复合状态”。
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/8fe6b1ec-af38-4b88-8aed-3a1545ec7cbe
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts