24 Markdown 状态图 |
您所在的位置:网站首页 › 绘制状态图描述电脑如何从启动状态到关机状态 › 24 Markdown 状态图 |
Markdown 状态图
1. 前言
Markdown 的原生语法不支持绘制图形,但通过扩展模块,我们可以将一些格式化的文字渲染成我们需要的图形。常用的图形有 “流程图”、“时序图”、“类图”、“状态图”、“甘特图”、"饼图" 等。 本节将重点介绍如何通过 Mermaid 绘制「状态图」。 状态图 (Statechart) 是描述一个实体基于事件反应的动态行为,是使对象达到某种状态的事件、条件或操作的图形化描述。 一个完整的状态图由状态、转换组成。 环境说明: 考虑到 Markdown 工具之间的不兼容,有的内容直接从页面复制粘贴到本地不会正常显示,大家学习时自己动手写是肯定没问题的。本节所有实例代码及演示效果均使用 Typora 工具完成。 Mermaid 为 Markdown 扩展语法,需要在 Typora 设置中开启对图表的语法支持。其方式为:「设置」->「Markdown」->「Markdown 扩展语法」-> 勾选「图表」,如下图: 2. 语法详解 2.1 状态图中的「状态」状态代表某一对象在某一特定的条件、时间下所保持的静态值。 使用 Mermaid 扩展绘制状态图时,有多种方式声明一个状态节点。 实例 1: 通过设置状态 ID 声明状态 ```mermaid stateDiagram 状态1 ```上述代码将会渲染成如下效果: 实例 2: 使用 「state」关键字来描述共同声明状态节点。 ```mermaid stateDiagram state "状态描述性文字" as 状态2 ```上述代码将会渲染成如下效果: 实例 3: 使用「状态 ID + 冒号」的方式简化状态节点的声明。 ```mermaid stateDiagram 状态3 : 状态3的文字描述 ```上述代码将会渲染成如下效果: 2.2 状态图中的「转换」「转换」在状态图中表现为连接两个状态节点的单向箭头,在 Mermaid 扩展语法中的写法为「字符箭头 -->」。 实例 4: 用单向箭头表示转换。 ```mermaid stateDiagram 状态1 --> 状态2 ```此代码渲染效果如下: 通过 (行内容):label 的形式,为转换添加描述文本。 实例 5: 增加描述。 ```mermaid stateDiagram 状态1 --> 状态2: 咻~ ```渲染效果如下: 状态图中有两个特殊的状态节点:开始节点和结束节点。如果需要在状态图中显示开始或结束节点,可以通过 [*] 方式声明。 实例 6: 增加开始和结束节点。 ```mermaid stateDiagram [*] --> 状态节点 状态节点 --> [*] ```渲染结果如下: 2.3 状态图中的「嵌套」在负责的状态描述中,有的状态节点会包含一系列的子状态,我们可以用组合「嵌套」的方式来描绘它们。在 Mermaid 扩展中,描述嵌套的方式,是使用「花括号 {}」描述子状态。 实例 7: ```mermaid stateDiagram [*] --> 父状态节点 state 父状态节点 { [*] --> 子状态节点 子状态节点 --> [*] } ```渲染结果如下: 「嵌套」的层数没有限制。 实例 8: 多层嵌套。 ```mermaid stateDiagram [*] --> 第一层状态节点 state 第一层状态节点 { [*] --> 第二层 state 第二层 { [*] --> 第二层 第二层 --> 第三层 state 第三层 { [*] --> 第三层 第三层 --> [*] } } } ```渲染效果如下: 状态转换可以在「嵌套」的外层,也就是群组间实现。 实例 9: 群组之间的嵌套。 ```mermaid stateDiagram [*] --> 第一层 第一层 --> 第二层 第一层 --> 第三层 state 第一层 { [*] --> 第一层子节点 第一层子节点 --> [*] } state 第二层 { [*] --> 第二层子节点 第二层子节点 --> [*] } state 第三层 { [*] --> 第三层子节点 第三层子节点 --> [*] } ```渲染效果如下: 2.4 状态图中的「分支」对于非单一结果的状态转换,我们可以使用 和 标签实现。 实例 10: 使用 描述分支,使用 描述聚合。 ```mermaid stateDiagram state 分支 [*] --> 分支 分支 --> 分支2 分支 --> 分支3 state 合并 分支2 --> 合并 分支3 --> 合并 合并 --> 状态4 状态4 --> [*] ```渲染效果如下: 2.5 状态图中的「并行」对于一些同步完成的状态转换,我们可以用 -- 符号声明并行效果。 实例 11: ```mermaid stateDiagram [*] --> 激活状态 state 激活状态 { [*] --> NumLock关 NumLock关 --> NumLock开 : 按下 NumLock 键 NumLock开 --> NumLock关 : 按下 NumLock 键 -- [*] --> CapsLock关 CapsLock关 --> CapsLock开 : 按下 CapsLock 键 CapsLock开 --> CapsLock关 : 按下 CapsLock 键 -- [*] --> ScrollLock关 ScrollLock关 --> ScrollLock开 : 按下 ScrollLock 键 ScrollLock开 --> ScrollLock关 : 按下 ScrollLock 键 } ```渲染效果如下: 2.6 为状态图增加「备注」有时候图表元素不能完全表达我们的设计思路,这时候需要在图中加入文字描述。在 Mermaid 语法中,使用 note of 备注内容 end notes 的方式,将备注添加到状态节点的右侧(左侧)。 实例 12: ```mermaid stateDiagram 状态1 : 描述将出现在右侧 note right of 状态1 这里添加描述内容 end note 状态1 --> 状态2 note left of 状态2 : 在节点左侧添加描述 ```渲染效果如下: 3. 使用场景及实例状态图专门用于表示依赖于状态的行为。 实例 13: 出货状态示意图。 ```mermaid stateDiagram [*] --> 下单成功 下单成功 --> 备货 state 出货中 备货 --> 出货中 出货中 --> 出货失败 出货失败 --> [*] 出货中 --> 出货确认 出货确认 --> 出货完毕 出货完毕 --> 订单完成 订单完成 --> [*] ```其渲染效果如下: 4. 小结 Mermaid 为 Markdown 扩展了使用普通文本生成状态图的语法及渲染支持; Mermaid 状态图的基本元素包含「状态节点」、「转换」; Mermaid 状态图还可以将节点合并,实现「嵌套」的效果; Mermaid 状态图的逻辑支持「分支」、「并行」; Mermaid 状态图还可以通过「备注」的方式,为状态图提供更多的细节描述。 划线 写笔记 复制0/1000 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |