<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>时序图 on Liangweidong's blog</title><link>https://liangweidonggood.github.io/tags/%E6%97%B6%E5%BA%8F%E5%9B%BE/</link><description>Recent content in 时序图 on Liangweidong's blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 04 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://liangweidonggood.github.io/tags/%E6%97%B6%E5%BA%8F%E5%9B%BE/index.xml" rel="self" type="application/rss+xml"/><item><title>UML 建模（用例图/时序图/协作图/三种模型）</title><link>https://liangweidonggood.github.io/p/uml-jian-mo/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://liangweidonggood.github.io/p/uml-jian-mo/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/uml-jian-mo/image/cover.jpg" alt="Featured image of post UML 建模（用例图/时序图/协作图/三种模型）" /&gt;&lt;h1 id="uml-建模用例图--时序图--协作图--三种模型"&gt;UML 建模（用例图 / 时序图 / 协作图 / 三种模型）
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;系统架构师考试 | UML 建模专题
对应 2021 年下半年案例分析 试题二
阅读时长：约 12 分钟&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="前言"&gt;前言
&lt;/h2&gt;&lt;p&gt;UML（Unified Modeling Language，统一建模语言）是面向对象分析和设计的事实标准。系统架构师考试中，UML 主要考&amp;quot;看图填空&amp;quot;——给定一张图，让你填参与者、用例、对象、消息等。本篇系统梳理高频 UML 图：&lt;strong&gt;用例图、时序图、协作图&lt;/strong&gt;，以及面向对象的&lt;strong&gt;三种模型&lt;/strong&gt;（对象模型 / 动态模型 / 功能模型）。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一用例图use-case-diagram"&gt;一、用例图（Use Case Diagram）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：描述系统的&lt;strong&gt;功能边界&lt;/strong&gt;——谁用系统、能做什么。&lt;/p&gt;
&lt;h3 id="11-元素构成"&gt;1.1 元素构成
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;元素&lt;/th&gt;
					&lt;th&gt;图形&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;参与者（Actor）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;火柴人&lt;/td&gt;
					&lt;td&gt;系统外部的交互方（人、外部系统、定时器）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;用例（Use Case）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;椭圆&lt;/td&gt;
					&lt;td&gt;系统提供的一个完整功能&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;系统边界&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;矩形&lt;/td&gt;
					&lt;td&gt;框定系统范围，参与者在外、用例在内&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;关联&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;实线&lt;/td&gt;
					&lt;td&gt;参与者与用例之间的连线&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;包含（include）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;虚线 + &lt;code&gt;&amp;lt;&amp;lt;include&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;A 包含 B（B 是 A 的一部分，必执行）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;扩展（extend）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;虚线 + &lt;code&gt;&amp;lt;&amp;lt;extend&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;A 扩展 B（B 在特定条件下触发）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;泛化（generalization）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;实线 + 空心三角&lt;/td&gt;
					&lt;td&gt;用例或参与者之间的继承关系&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-答题套路"&gt;1.2 答题套路
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;识别参与者&lt;/strong&gt;——题目里&amp;quot;谁&amp;quot;用这个系统？通常是 2-3 个角色&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;识别用例&lt;/strong&gt;——题目里&amp;quot;做什么&amp;quot;？每个动词短语 = 一个用例&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;区分主用例 vs 辅助用例&lt;/strong&gt;——包含/扩展关系&lt;/li&gt;
&lt;li&gt;画图时参与者放&lt;strong&gt;两侧&lt;/strong&gt;，用例放中间&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="13-实战预约挂号系统2021-真题"&gt;1.3 实战：预约挂号系统（2021 真题）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;参与者：(1) &lt;strong&gt;患者&lt;/strong&gt; / (2) &lt;strong&gt;医院管理员&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;患者侧用例（6 个）：注册登录、信息浏览、账号管理、预约挂号、查询与取消预约、报告查询&lt;/li&gt;
&lt;li&gt;管理员侧用例（4 个）：号源管理、预约管理、报表管理、信用管理&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;技巧&lt;/strong&gt;：左侧用例往往来自&amp;quot;前台操作&amp;quot;（面向 C 端用户），右侧用例来自&amp;quot;后台管理&amp;quot;（面向 B 端运维）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="二时序图sequence-diagram"&gt;二、时序图（Sequence Diagram）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：描述&lt;strong&gt;对象之间消息的时间顺序&lt;/strong&gt;——谁先调用谁、调用什么、返回什么。&lt;/p&gt;
&lt;h3 id="21-元素构成"&gt;2.1 元素构成
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;元素&lt;/th&gt;
					&lt;th&gt;图形&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;对象&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;顶部矩形&lt;/td&gt;
					&lt;td&gt;写 &lt;code&gt;对象名:类名&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;生命线&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;垂直虚线&lt;/td&gt;
					&lt;td&gt;从对象向下延伸&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;激活条&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;细长矩形&lt;/td&gt;
					&lt;td&gt;表示对象正在执行&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;同步消息&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;实线 + 实心三角箭头&lt;/td&gt;
					&lt;td&gt;必须等返回才继续&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;异步消息&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;实线 + 空心箭头&lt;/td&gt;
					&lt;td&gt;不等返回就继续&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;返回消息&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;虚线 + 空心箭头&lt;/td&gt;
					&lt;td&gt;方法返回值&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;自调用&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;回路箭头&lt;/td&gt;
					&lt;td&gt;对象调用自身方法&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-答题套路"&gt;2.2 答题套路
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;识别对象&lt;/strong&gt;——题干里所有&amp;quot;实体&amp;quot;（界面、数据库访问类、表、控制器）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;识别消息&lt;/strong&gt;——动词 = 消息名（&amp;ldquo;发起请求&amp;rdquo;/&amp;ldquo;加载数据&amp;rdquo;/&amp;ldquo;返回结果&amp;rdquo;）&lt;/li&gt;
&lt;li&gt;时间顺序：消息&lt;strong&gt;从上到下&lt;/strong&gt;排列&lt;/li&gt;
&lt;li&gt;实参/返回值标注在消息名附近&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="23-实战预约挂号流程"&gt;2.3 实战：预约挂号流程
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;预约人员 -&amp;gt; 预约界面 : 发起预约挂号请求
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;预约界面 -&amp;gt; 数据库访问类 : 获取医生信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;数据库访问类 -&amp;gt; 医生列表 : 加载医生信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;医生列表 -&amp;gt; 医生出诊时段表 : 加载医生出诊时段
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;医生出诊时段表 --&amp;gt; 预约界面 : 返回医生可预约时段
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;预约界面 --&amp;gt; 预约人员 : 显示医生可预约时段
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;预约人员 -&amp;gt; 预约界面 : 选择医生/就诊时间确认预约
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;预约界面 -&amp;gt; 数据库访问类 : 写入预约信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;数据库访问类 --&amp;gt; 预约界面 : 返回预约结果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;预约界面 --&amp;gt; 预约人员 : 显示预约结果
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="三协作图communication-diagram"&gt;三、协作图（Communication Diagram）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：与时序图等价，但&lt;strong&gt;强调对象之间的链接结构&lt;/strong&gt;而非时间顺序。&lt;/p&gt;
&lt;h3 id="31-元素构成"&gt;3.1 元素构成
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;对象&lt;/strong&gt;：矩形&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;链接&lt;/strong&gt;：对象之间的实线（表示它们之间有消息往来）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;消息&lt;/strong&gt;：链接上的带序号的箭头（1、1.1、1.2、2、2.1&amp;hellip;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;消息顺序&lt;/strong&gt;：通过&lt;strong&gt;嵌套编号&lt;/strong&gt;表达&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-时序图-vs-协作图核心区别必考"&gt;3.2 时序图 vs 协作图（核心区别，必考）
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;时序图（Sequence Diagram）&lt;/th&gt;
					&lt;th&gt;协作图（Communication Diagram）&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;强调重点&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;消息的时间顺序&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;对象之间的链接结构&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;布局&lt;/td&gt;
					&lt;td&gt;纵向（时间向下）&lt;/td&gt;
					&lt;td&gt;自由（空间）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;消息编号&lt;/td&gt;
					&lt;td&gt;隐式（按位置）&lt;/td&gt;
					&lt;td&gt;显式（1、1.1、1.2）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;易读性&lt;/td&gt;
					&lt;td&gt;易看&amp;quot;执行次序&amp;quot;&lt;/td&gt;
					&lt;td&gt;易看&amp;quot;对象关系&amp;quot;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;转换&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;可相互转换&lt;/strong&gt;（UML 规范支持）&lt;/td&gt;
					&lt;td&gt;同左&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;软考答题要点&lt;/strong&gt;：两者描述&lt;strong&gt;同一信息&lt;/strong&gt;，UML 工具（Enterprise Architect、StarUML、PlantUML）支持&lt;strong&gt;自动互转&lt;/strong&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="四面向对象三种模型"&gt;四、面向对象三种模型
&lt;/h2&gt;&lt;p&gt;OOA（面向对象分析）需要建立&lt;strong&gt;三个相互独立又相互依赖的模型&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模型&lt;/th&gt;
					&lt;th&gt;关注点&lt;/th&gt;
					&lt;th&gt;主要元素&lt;/th&gt;
					&lt;th&gt;回答的问题&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;对象模型&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;静态结构&lt;/td&gt;
					&lt;td&gt;对象、类、属性、操作、关联、聚合、泛化&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;是什么&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;动态模型&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;动态行为&lt;/td&gt;
					&lt;td&gt;状态、事件、状态转换（状态图）&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;什么时候发生&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;功能模型&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;数据变换&lt;/td&gt;
					&lt;td&gt;加工、数据流、数据存储（DFD）&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;做什么&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="41-三者关联关系必考"&gt;4.1 三者关联关系（必考）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;对象模型&lt;/strong&gt; = 静态骨架&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动态模型&lt;/strong&gt; = 在骨架上跑&amp;quot;时序&amp;quot;（对象 = 状态机主体）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;功能模型&lt;/strong&gt; = 在骨架上做&amp;quot;变换&amp;quot;
&lt;ul&gt;
&lt;li&gt;DFD 中的&lt;strong&gt;加工&lt;/strong&gt; ≈ 对象模型中&lt;strong&gt;类的方法&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;DFD 中的&lt;strong&gt;数据存储&lt;/strong&gt; ≈ 对象模型中&lt;strong&gt;类的属性&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三者必须并建&lt;/strong&gt;，缺一不可&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-哪些用于需求分析"&gt;4.2 哪些用于需求分析？
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能模型&lt;/strong&gt;：需求分析&lt;strong&gt;最核心&lt;/strong&gt;（DFD 直接描述系统功能需求）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对象模型&lt;/strong&gt;：用于需求分析（识别候选对象和类）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动态模型&lt;/strong&gt;：用于系统分析阶段（控制流、状态转换），部分用例的动态行为也在需求分析中识别&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：&lt;strong&gt;功能模型主要用于需求分析&lt;/strong&gt;；对象模型和动态模型主要用于系统分析（OOA 阶段）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="五2024-视角"&gt;五、2024+ 视角
&lt;/h2&gt;&lt;h3 id="51-自动化画图工具"&gt;5.1 自动化画图工具
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;工具&lt;/th&gt;
					&lt;th&gt;特点&lt;/th&gt;
					&lt;th&gt;适用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;PlantUML&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;文本式画图，写代码生成 UML&lt;/td&gt;
					&lt;td&gt;程序员、技术评审&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Mermaid&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Markdown 友好，GitHub/Hugo 原生支持&lt;/td&gt;
					&lt;td&gt;文档嵌入&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Draw.io&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;图形化拖拽，免费&lt;/td&gt;
					&lt;td&gt;非程序员、白板&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Structurizr DSL&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;C4 模型首选&lt;/td&gt;
					&lt;td&gt;架构图&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Mermaid Live Editor&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;浏览器实时预览&lt;/td&gt;
					&lt;td&gt;快速原型&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="plantuml-画时序图示例"&gt;PlantUML 画时序图示例
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;actor 患者
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;participant &amp;#34;预约界面&amp;#34; as UI
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;participant &amp;#34;数据库访问类&amp;#34; as DAO
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;database &amp;#34;医生列表&amp;#34; as DB1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;database &amp;#34;医生出诊时段表&amp;#34; as DB2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;患者 -&amp;gt; UI : 发起预约挂号请求
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UI -&amp;gt; DAO : 获取医生信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DAO -&amp;gt; DB1 : 加载医生信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DB1 -&amp;gt; DB2 : 加载医生出诊时段
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DB2 --&amp;gt; UI : 返回医生可预约时段
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UI --&amp;gt; 患者 : 显示医生可预约时段
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;患者 -&amp;gt; UI : 选择医生/时间确认预约
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UI -&amp;gt; DAO : 写入预约信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DAO --&amp;gt; UI : 返回预约结果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UI --&amp;gt; 患者 : 显示预约结果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="mermaid-画时序图示例"&gt;Mermaid 画时序图示例
&lt;/h4&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 actor 患者
 患者-&gt;&gt;预约界面: 发起预约挂号请求
 预约界面-&gt;&gt;数据库访问类: 获取医生信息
 数据库访问类-&gt;&gt;医生列表: 加载医生信息
 医生列表-&gt;&gt;医生出诊时段表: 加载出诊时段
 医生出诊时段表--&gt;&gt;预约界面: 返回可预约时段
 预约界面--&gt;&gt;患者: 显示医生可预约时段
 患者-&gt;&gt;预约界面: 确认预约
 预约界面-&gt;&gt;数据库访问类: 写入预约信息
 数据库访问类--&gt;&gt;预约界面: 返回结果
 预约界面--&gt;&gt;患者: 显示预约结果&lt;/pre&gt;&lt;h3 id="52-uml-在云原生时代的变化"&gt;5.2 UML 在云原生时代的变化
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;C4 模型&lt;/strong&gt;（Simon Brown）逐渐取代传统 UML 4+1 视图——更贴近代码、易维护&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ADR（架构决策记录）&lt;/strong&gt; + &lt;strong&gt;Fitness Function&lt;/strong&gt;：UML 静态图 → 架构可执行验证&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大模型生成 UML&lt;/strong&gt;：GPT-4 / Claude 直接从需求文档生成用例图、时序图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;领域驱动设计（DDD）&lt;/strong&gt;：UML 类图 → 限界上下文、聚合根、领域事件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arc42 文档模板&lt;/strong&gt;：UML 图 + 架构决策 + 质量场景一体化&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-软考答题趋势"&gt;5.3 软考答题趋势
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;2024+ 软考更注重&lt;strong&gt;实战应用&lt;/strong&gt;——只背图元素不够，要会从需求中&amp;quot;识别&amp;quot;和&amp;quot;画图&amp;quot;&lt;/li&gt;
&lt;li&gt;题目经常给&lt;strong&gt;业务描述&lt;/strong&gt;，让你画 UML 图（不再只是填空）&lt;/li&gt;
&lt;li&gt;协作图考频下降（被时序图替代），但&lt;strong&gt;区别对比题&lt;/strong&gt;仍是送分题&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="六答题套路总结软考专用"&gt;六、答题套路总结（软考专用）
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;题型&lt;/th&gt;
					&lt;th&gt;套路&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;填参与者&lt;/td&gt;
					&lt;td&gt;看动作的&lt;strong&gt;发起方&lt;/strong&gt;（&amp;ldquo;谁登录/谁查询&amp;rdquo;）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;填用例&lt;/td&gt;
					&lt;td&gt;提取功能描述里的&lt;strong&gt;动词短语&lt;/strong&gt;（每个动词 = 一个用例）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;填对象&lt;/td&gt;
					&lt;td&gt;提取题干里的&lt;strong&gt;实体名词&lt;/strong&gt;（界面、类、表、控制器）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;填消息&lt;/td&gt;
					&lt;td&gt;提取&lt;strong&gt;动词&lt;/strong&gt;（&amp;ldquo;发起/加载/返回/传送&amp;rdquo;）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;区别对比题&lt;/td&gt;
					&lt;td&gt;答&amp;quot;强调重点 / 表示方法 / 布局 / 易读性&amp;quot; 4 个维度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;三种模型题&lt;/td&gt;
					&lt;td&gt;答&amp;quot;关注点 / 主要元素 / 解决什么问题&amp;quot; 3 个维度 + &lt;strong&gt;关联关系&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;2021 年下半年系统架构设计师考试真题（下午案例分析 试题二）&lt;/li&gt;
&lt;li&gt;《系统架构设计师教程》第 7 章 软件工程&lt;/li&gt;
&lt;li&gt;UML 2.5 规范（OMG 官方）&lt;/li&gt;
&lt;li&gt;《UML 用户指南》Grady Booch、James Rumbaugh、Ivar Jacobson&lt;/li&gt;
&lt;li&gt;《PlantUML 官方文档》https://plantuml.com/&lt;/li&gt;
&lt;li&gt;《Mermaid 官方文档》https://mermaid.js.org/&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Mermaid 与 PlantUML 类图：从 Markdown 画 UML</title><link>https://liangweidonggood.github.io/p/mermaid-plantuml-lei-tu-2015/</link><pubDate>Fri, 15 May 2015 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/mermaid-plantuml-lei-tu-2015/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/mermaid-plantuml-lei-tu-2015/image/cover.jpg" alt="Featured image of post Mermaid 与 PlantUML 类图：从 Markdown 画 UML" /&gt;&lt;h2 id="为什么用-markdown-画-uml"&gt;为什么用 Markdown 画 UML
&lt;/h2&gt;&lt;p&gt;UML 工具（Enterprise Architect、StarUML、Visio）的痛点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;商业授权贵&lt;/li&gt;
&lt;li&gt;团队协作要共享文件&lt;/li&gt;
&lt;li&gt;改一处要打开 GUI 拖拽&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;文本描述 UML&lt;/strong&gt; 的方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mermaid&lt;/strong&gt;：2014 年起，GitHub 原生支持，类图/时序图/流程图 10+ 种&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PlantUML&lt;/strong&gt;：2009 年起，Java 实现，UML 2.5 全覆盖，扩展性最强&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mermaid"&gt;Mermaid
&lt;/h2&gt;&lt;h3 id="类图基础"&gt;类图基础
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;classDiagram
 Animal &lt;|-- Person
 Person &lt;|.. Man&lt;/pre&gt;&lt;h3 id="类图语法"&gt;类图语法
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;classDiagram
 class Animal {
 +String name
 +int age
 +eat() void
 -breathe() void
 }
 class Person {
 +String id
 +think() void
 }
 class Man {
 +work() void
 }
 Animal &lt;|-- Person // 继承（实心空心三角箭头）
 Person &lt;|.. Man // 实现（虚线空心三角箭头）&lt;/pre&gt;&lt;h3 id="关系符号"&gt;关系符号
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;符号&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;&amp;lt;|--&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;继承（extends）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;&amp;lt;|\..&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;实现（implements）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;*--&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;组合（Composition）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;o--&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;聚合（Aggregation）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;关联（Association）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;..&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;依赖（Dependency）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;实线链接&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;..&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;虚线链接&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="时序图"&gt;时序图
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 participant U as User
 participant A as App
 participant S as Server
 U-&gt;&gt;A: 点击登录
 A-&gt;&gt;S: POST /login {user, pass}
 S--&gt;&gt;A: 200 {token}
 A--&gt;&gt;U: 跳转到首页&lt;/pre&gt;&lt;h3 id="流程图"&gt;流程图
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD
 A[开始] --&gt; B{是否登录}
 B -- 是 --&gt; C[首页]
 B -- 否 --&gt; D[登录页]
 D --&gt; E[提交登录]
 E --&gt; F{验证成功}
 F -- 是 --&gt; C
 F -- 否 --&gt; G[错误提示]
 G --&gt; D&lt;/pre&gt;&lt;h3 id="状态图"&gt;状态图
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;stateDiagram-v2
 [*] --&gt; 待支付
 待支付 --&gt; 已支付: 付款
 已支付 --&gt; 已发货: 发货
 已发货 --&gt; 已签收: 签收
 已签收 --&gt; [*]
 待支付 --&gt; 已取消: 取消
 已取消 --&gt; [*]&lt;/pre&gt;&lt;h3 id="er-图"&gt;ER 图
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;erDiagram
 USER ||--o{ ORDER : places
 USER {
 int id PK
 string name
 string email
 }
 ORDER {
 int id PK
 int user_id FK
 date created_at
 }&lt;/pre&gt;&lt;h3 id="github-原生支持"&gt;GitHub 原生支持
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# README.md
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\`\`\`mermaid
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;classDiagram
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Animal &amp;lt;|-- Person
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\`\`\`
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GitHub 会自动渲染成 SVG。&lt;/p&gt;
&lt;h3 id="idea-集成"&gt;IDEA 集成
&lt;/h3&gt;&lt;p&gt;IDEA Ultimate 内置 Mermaid 预览：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.md&lt;/code&gt; 文件里的 &lt;code&gt;mermaid&lt;/code&gt; 代码块&lt;/li&gt;
&lt;li&gt;或装 &lt;strong&gt;Mermaid 插件&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="vscode-集成"&gt;VSCode 集成
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;装 &lt;strong&gt;Markdown Preview Mermaid Support&lt;/strong&gt; 插件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + V&lt;/code&gt; 预览&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plantuml"&gt;PlantUML
&lt;/h2&gt;&lt;p&gt;PlantUML 比 Mermaid 功能强，覆盖 UML 2.5 全套，扩展性更好。&lt;/p&gt;
&lt;h3 id="安装"&gt;安装
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Java JRE 8+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -jar plantuml.jar file.puml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# VSCode 插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# PlantUML (by jebbs)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# IDEA 插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# PlantUML integration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="类图"&gt;类图
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Animal {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +name: String
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +age: int
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +eat(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -breathe(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Person {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +id: String
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +think(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Man {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +work(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Animal &amp;lt;|-- Person
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Person &amp;lt;|.. Man
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="关系"&gt;关系
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A &amp;lt;|-- B &amp;#39; 继承
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;C &amp;lt;|.. D &amp;#39; 实现
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;E *-- F &amp;#39; 组合
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;G o-- H &amp;#39; 聚合
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I --&amp;gt; J &amp;#39; 关联
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;K ..&amp;gt; L &amp;#39; 依赖
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="时序图-1"&gt;时序图
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;actor User
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;participant &amp;#34;App&amp;#34; as A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;participant &amp;#34;Server&amp;#34; as S
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User -&amp;gt; A: 点击登录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A -&amp;gt; S: POST /login
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;S --&amp;gt; A: 200 {token}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A --&amp;gt; User: 跳转到首页
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="流程图活动图"&gt;流程图（活动图）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(*) --&amp;gt; &amp;#34;开始&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if &amp;#34;已登录&amp;#34; then
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[是] &amp;#34;首页&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt; (*)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;else
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[否] &amp;#34;登录页&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt; &amp;#34;提交登录&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if &amp;#34;验证成功&amp;#34; then
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[是] &amp;#34;首页&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; else
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[否] &amp;#34;错误提示&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; endif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;endif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="状态图-1"&gt;状态图
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[*] --&amp;gt; 待支付
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;待支付 --&amp;gt; 已支付: 付款
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已支付 --&amp;gt; 已发货: 发货
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已发货 --&amp;gt; 已签收: 签收
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已签收 --&amp;gt; [*]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;待支付 --&amp;gt; 已取消: 取消
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="组件图"&gt;组件图
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;startuml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Frontend&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Web&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Mobile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Backend&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Auth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Web&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Mobile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Auth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;enduml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="部署图"&gt;部署图
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node &amp;#34;Web Server&amp;#34; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [Nginx]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [App]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node &amp;#34;Database&amp;#34; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [MySQL]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [Redis]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Nginx] --&amp;gt; [App]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[App] --&amp;gt; [MySQL]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[App] --&amp;gt; [Redis]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="主题与样式"&gt;主题与样式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!theme plain
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skinparam classAttributeIconSize 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skinparam classFontSize 14
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skinparam classBackgroundColor #F0F0F0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Foo {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +method()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="plantuml-server"&gt;PlantUML Server
&lt;/h3&gt;&lt;p&gt;如果不想装 Java，可以用自己的 PlantUML Server：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 官方&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d -p 8080:8080 plantuml/plantuml-server
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 用法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="s2"&gt;&amp;#34;http://localhost:8080/svg/~1uml@somefile&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或者用公共 PlantUML 服务：&lt;a class="link" href="https://www.plantuml.com/plantuml/uml/" target="_blank" rel="noopener"
 &gt;https://www.plantuml.com/plantuml/uml/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mermaid-vs-plantuml-对比"&gt;Mermaid vs PlantUML 对比
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Mermaid&lt;/th&gt;
					&lt;th&gt;PlantUML&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;渲染&lt;/td&gt;
					&lt;td&gt;JS（前端）&lt;/td&gt;
					&lt;td&gt;Java&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GitHub 原生&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;❌（需插件）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;类型覆盖&lt;/td&gt;
					&lt;td&gt;10+&lt;/td&gt;
					&lt;td&gt;UML 2.5 全&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;扩展性&lt;/td&gt;
					&lt;td&gt;一般&lt;/td&gt;
					&lt;td&gt;强（皮肤、宏）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;主题&lt;/td&gt;
					&lt;td&gt;少&lt;/td&gt;
					&lt;td&gt;多&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;性能&lt;/td&gt;
					&lt;td&gt;较慢（前端渲染）&lt;/td&gt;
					&lt;td&gt;快（Java 服务端）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;上手&lt;/td&gt;
					&lt;td&gt;简单&lt;/td&gt;
					&lt;td&gt;较难&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;输出&lt;/td&gt;
					&lt;td&gt;SVG&lt;/td&gt;
					&lt;td&gt;SVG/PNG/PDF&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;选 Mermaid 的场景&lt;/strong&gt;：团队用 GitHub Wiki / README、简单图为主、JS 渲染方便
&lt;strong&gt;选 PlantUML 的场景&lt;/strong&gt;：需要严格 UML、复杂时序图、企业级文档&lt;/p&gt;
&lt;h2 id="工程化"&gt;工程化
&lt;/h2&gt;&lt;h3 id="文档生成器"&gt;文档生成器
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;docsify&lt;/strong&gt; + Mermaid 插件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitBook&lt;/strong&gt; + Mermaid 插件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VuePress&lt;/strong&gt; + Mermaid 插件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docusaurus&lt;/strong&gt; + Mermaid 插件（v3 内置）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cicd-集成"&gt;CI/CD 集成
&lt;/h3&gt;&lt;p&gt;GitHub Action 自动校验 Mermaid 语法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# .github/workflows/mermaid-check.yml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Mermaid Check&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;pull_request]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/checkout@v3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;neenjaw/extract-mermaid-blocks-action@v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;output-folder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mermaid-blocks&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nicolegordon/mermaid-validate-action@v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mermaid-blocks&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="ide-实时预览"&gt;IDE 实时预览
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VSCode + Markdown Preview Enhanced&lt;/strong&gt;：实时预览 Mermaid&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IDEA + PlantUML Integration&lt;/strong&gt;：右键 PlantUML 文件 → Show Preview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsidian&lt;/strong&gt;：原生支持 Mermaid&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="下一步"&gt;下一步
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;想把类图转成代码，看 JetBrains MPS、UML Designer&lt;/li&gt;
&lt;li&gt;想要画系统架构图，看 2017-08-15《iOS 应用开发与证书管理》中架构图部分&lt;/li&gt;
&lt;li&gt;想要画 UI 原型，看 2014-05-15《Axure 产品原型设计》&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Mermaid 官方：https://mermaid.js.org/&lt;/li&gt;
&lt;li&gt;Mermaid Live Editor：https://mermaid.live/&lt;/li&gt;
&lt;li&gt;PlantUML 官方：https://plantuml.com/&lt;/li&gt;
&lt;li&gt;PlantUML 中文文档：https://plantuml.com/zh/&lt;/li&gt;
&lt;li&gt;PlantUML Server：https://github.com/plantuml/plantuml-server&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2024-视角从-mermaidplantuml-到-ai-画图--架构即代码"&gt;2024+ 视角（从 Mermaid/PlantUML 到 AI 画图 + 架构即代码）
&lt;/h2&gt;&lt;p&gt;2015 年写 Mermaid/PlantUML 时，文本画图还是&amp;quot;新事物&amp;quot;；到 2024-2026 年，这两套已经全面成为行业标准，并出现明显分层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GitHub 原生支持的扩散&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;Mermaid 仍是 GitHub/GitLab 默认渲染引擎&lt;/li&gt;
&lt;li&gt;GitLab 15+ 也支持 PlantUML 渲染&lt;/li&gt;
&lt;li&gt;Notion、飞书、语雀等均原生支持 Mermaid&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mermaid v10/v11 增强&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;新增 &lt;strong&gt;C4 插件&lt;/strong&gt;（Context/Container/Component）—— 配合 Structurizr 简化架构图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git graph&lt;/strong&gt; 已成为最常被复制的图类型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architecture diagram&lt;/strong&gt;（v10.6+）支持服务、数据库、队列等图标&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PlantUML 的 C4-PlantUML 扩展&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;第三方 C4-PlantUML 让 PlantUML 也能画 C4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mermaid 渲染 C4 性能 vs PlantUML 渲染 C4 性能&lt;/strong&gt;：复杂 C4 图 Mermaid 仍偏慢&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 画图崛起&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mermaid Chart + AI&lt;/strong&gt;（自动从文字生成图）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eraser.io / Whimsical AI&lt;/strong&gt;（手绘草图转 UML）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot Workspace&lt;/strong&gt; 支持从 issue 描述自动生成架构图&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structurizr DSL&lt;/strong&gt; 全面胜出&amp;quot;画架构图&amp;quot;场景：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;C4 模型 + Structurizr DSL&lt;/strong&gt;（Java 生态）+ &lt;strong&gt;Structurizr Lite&lt;/strong&gt;（本地预览）已是画系统架构的&lt;strong&gt;事实标准&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;替代品：&lt;strong&gt;Mermaid + C4 插件&lt;/strong&gt;（轻量）、&lt;strong&gt;draw.io / diagrams.net&lt;/strong&gt;（GUI 派）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档工具集成&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Docusaurus&lt;/strong&gt;（v3+）内置 Mermaid&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hugo&lt;/strong&gt; + &lt;strong&gt;Mermaid 短代码&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VitePress / Astro&lt;/strong&gt; 都默认支持 Mermaid&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;新工具涌现&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Excalidraw&lt;/strong&gt;（手绘风格，团队协作）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tldraw&lt;/strong&gt;（白板式画架构图）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IcePanel&lt;/strong&gt;（C4 互动式）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ilograph&lt;/strong&gt;（多视角架构图）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PlantUML 的&amp;quot;危机&amp;quot;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;公共 PlantUML Server 经常因负载限速&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;私有 PlantUML Server&lt;/strong&gt; + &lt;strong&gt;Asciidoctor Diagram&lt;/strong&gt; 仍是企业内部方案&lt;/li&gt;
&lt;li&gt;一些企业转向 &lt;strong&gt;D2&lt;/strong&gt;（Terrastruct 出品，文本画图新秀，go 生态）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;选型更新（2024 视角）&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;场景&lt;/th&gt;
					&lt;th&gt;推荐工具&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;README/Wiki 简单图&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Mermaid&lt;/strong&gt;（GitHub 原生）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;严格 UML（时序/状态/类）&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;PlantUML&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;系统架构 C4&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Structurizr DSL&lt;/strong&gt;（首选） / Mermaid C4 插件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;手绘风格团队讨论&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Excalidraw&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;互动式架构&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;IcePanel / Ilograph&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AI 辅助&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Mermaid Chart AI / Eraser AI&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;复杂企业文档&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;PlantUML Server + Asciidoctor&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;2015 年这篇的&amp;quot;Mermaid/PlantUML 对比&amp;quot;框架&lt;strong&gt;至今成立&lt;/strong&gt;——GitHub 原生选 Mermaid，企业级严格 UML 选 PlantUML。&lt;strong&gt;变化的是 C4 模型成为架构图事实标准、AI 辅助画图崛起、私有 PlantUML Server 成为企业首选&lt;/strong&gt;。&lt;/p&gt;</description></item></channel></rss>