写在开头:本文大部分内容为转载,安装后先后遇到"unable to load diagram plugin"和"No diagrams overlap selections"的问题,折腾后参考其他文章解决。解决办法和链接地址已加红标记,希望有需要的朋友们不用再走弯路
PlantUML 是一个画图脚本语言,用它可以快速地画出:
简单地讲,我们使用 visio 画图时需要一个一个图去画,但使用 PlantUML 只需要用文字表达出图的内容,然后就可以直接生成图片。看一个最简单的例子:
-
B
ob -> Alice : Hello, how are you
-
A
lice -> Bob : Fine, thank you,
and you?
这些软件全部是开源或共享软件,不存在版权问题,可以放心使用。
Preferences -> Browse Packages ...
打开 sublime 的 Packages
目录,解压后的插件放在Packages
目录下为了简化使用,可以在 Sublime 里配置个快捷键。打开 Preferences -> Key Binding - User
,添加一个快捷键:
{ "keys": ["alt+d"], "command": "display_diagrams"}
上面的代码配置成按住 Alt + d
来生成 PlantUML 图片,你可以修改成你自己喜欢的按键。
效果检验
最后检验一下工作安装是否正确。打开 Sublime 输入:
-
B
ob -> Alice : Hello, how are you
-
A
lice -> Bob : Fine, thank you,
and you?
选中这些文本内容,按 Alt + d 会在当前工作目录下生成这个图片文件,同时自动弹出窗口显示图片。
注意事项
-
@startuml
-
-
title 时序图
-
-
== 鉴权阶段 ==
-
-
Alice -> Bob: 请求
-
Bob -> Alice: 应答
-
-
== 数据上传 ==
-
-
Alice -> Bob: 上传数据
-
note left: 这是显示在左边的备注
-
-
Bob --> Canny: 转交数据
-
... 不超过
5 秒钟 ...
-
Canny --> Bob: 状态返回
-
note right: 这是显示在右边的备注
-
-
Bob -> Alice: 状态返回
-
-
== 状态显示 ==
-
-
Alice -> Alice: 给自己发消息
-
-
@enduml
TIPS:
title
来指定标题:
来添加注释note
来显示备注,备注可以指定显示在左边或右边== xxx ==
来分隔时序图...
来表示延迟省略号
-
@startuml
-
-
left to right direction
-
actor 消费者
-
actor 销售员
-
rectangle 买单 {
-
消费者
-- (买单)
-
(买单) .> (付款) :
include
-
(帮助) .> (买单) :
extends
-
(买单)
-- 销售员
-
}
-
-
@
enduml
TIPS:
actor
来定义参与者(xxx)
来表示用例,用例用椭圆形表达
-
@startuml
-
-
title 流程图
-
-
(*) -->
"步骤1处理"
-
-->
"步骤2处理"
-
if
"条件1判断"
then
-
->[
true]
"条件1成立时执行的动作"
-
if
"分支条件2判断"
then
-
->[
no]
"条件2不成立时执行的动作"
-
-> === 中间流程汇总点
1 ===
-
else
-
-->[
yes] === 中间流程汇总点
1 ===
-
endif
-
if
"分支条件3判断"
then
-
-->[
yes]
"分支条件3成立时执行的动作"
-
-->
"Page.onRender ()" as render
-
--> === REDIRECT_CHECK ===
-
else
-
-->[
no]
"分支条件3不成立时的动作"
-
--> render
-
endif
-
else
-
-->[
false] === REDIRECT_CHECK ===
-
endif
-
-
if
"条件4判断"
then
-
->[
yes]
"条件4成立时执行的动作"
-
-->
"流程最后结点"
-
else
-
endif
-
-->
"流程最后结点"
-
-->(*)
-
-
@enduml
上面的流程图写的时候还是挺直观的,但画出来的图片渲染效果不好,对逻辑的显示不清楚。由于这个原因 PlantUML 实现了另外版本的流程图脚本。
下面是 PlantUML 支持的新版本的流程图脚本,从使用角度来讲,更直观,画出来的图片也更漂亮,推荐使用。
-
@startuml
-
-
start
-
:
"步骤1处理";
-
:
"步骤2处理";
-
if (
"条件1判断")
then (
true)
-
:条件
1成立时执行的动作;
-
if (
"分支条件2判断")
then (
no)
-
:
"条件2不成立时执行的动作";
-
else
-
if (
"条件3判断")
then (
yes)
-
:
"条件3成立时的动作";
-
else (
no)
-
:
"条件3不成立时的动作";
-
endif
-
endif
-
:
"顺序步骤3处理";
-
endif
-
-
if (
"条件4判断")
then (
yes)
-
:
"条件4成立的动作";
-
else
-
if (
"条件5判断")
then (
yes)
-
:
"条件5成立时的动作";
-
else (
no)
-
:
"条件5不成立时的动作";
-
endif
-
endif
-
stop
-
@enduml
TIPS:
start
来表示流程开始,使用 stop
来表示流程结束:xxx;
来表示if ("condition 1") then (true/yes/false/no)
来表示我们经常使用组件图来画部署视图,或者用来画系统的拓扑结构图。
-
@startuml
-
-
package
"组件1" {
-
[
"组件1.1"] - [
"组件1.2"]
-
[
"组件1.2"] -> [
"组件2.1"]
-
}
-
-
node
"组件2" {
-
[
"组件2.1"] - [
"组件2.2"]
-
[
"组件2.2"] --> [负载均衡服务器]
-
}
-
-
cloud {
-
[
负载均衡服务器] -> [逻辑服务器
1]
-
[
负载均衡服务器] -> [逻辑服务器
2]
-
[
负载均衡服务器] -> [逻辑服务器
3]
-
}
-
-
database
"MySql" {
-
folder
"This is my folder" {
-
[
Folder
3]
-
}
-
-
frame
"Foo" {
-
[
Frame
4]
-
}
-
}
-
-
[
逻辑服务器
1] --> [
Folder
3]
-
[
逻辑服务器
2] --> [
Frame
4]
-
[
逻辑服务器
3] --> [
Frame
4]
-
-
@enduml
TIPS:
[xxx]
来表示组件package, node, folder, frame, cloud, database
。不同的关键字图形不一样。我们一般使用状态图来画状态机。
-
@startuml
-
-
scale
640 width
-
-
[*] --> NotShooting
-
-
state NotShooting {
-
[*] --> Idle
-
I
dle --> Processing: SignalEvent
-
P
rocessing --> Idle: Finish
-
I
dle --> Configuring : EvConfig
-
C
onfiguring --> Idle : EvConfig
-
}
-
-
state Configuring {
-
[*] --> NewValueSelection
-
N
ewValueSelection --> NewValuePreview : EvNewValue
-
N
ewValuePreview --> NewValueSelection : EvNewValueRejected
-
N
ewValuePreview --> NewValueSelection : EvNewValueSaved
-
state NewValuePreview {
-
S
tate1 -> State2
-
}
-
}
-
-
@enduml
TIPS:
[*]
来表示状态的起点scale
命令来指定生成的图片的尺寸不需要去记这些标记,在需要的时候去使用它,通过不断地使用来熟悉不同的图的语法。可以下载 PlanUML 官方文档 作为参考,遇到问题的时候翻一翻,这样很快就可以学会使用 PlantUML 高效地画图。
转载:http://www.jianshu.com/p/e92a52770832
android studio安装plantUML过程:http://blog.csdn.net/u013831257/article/details/50118461
安装 Graphviz时, 执行sudo apt-get install graphviz即可。
详细的中文教程:https://wenku.baidu.com/view/867a78b448d7c1c708a145f4.html
详细的英文教程:http://plantuml.com/PlantUML_Language_Reference_Guide.pdf