PlantUML画图使用详解:类图、流程图、时序图等
创作时间:
作者:
@小白创作中心
PlantUML画图使用详解:类图、流程图、时序图等
引用
51CTO
1.
https://blog.51cto.com/u_9849794/13110582
PlantUML 是一个用于绘制各种类型图表的脚本语言,广泛应用于软件开发和系统设计领域。本文将详细介绍如何使用 PlantUML 绘制类图、流程图、时序图、用例图、状态图和组件图,并通过具体的代码案例帮助读者快速掌握其使用方法。
什么是 PlantUML
PlantUML 是一个画图脚本语言,用它可以快速地画出:
1. 类图
案例1:
@startuml
abstract class AbstractList
abstract AbstractCollection
interface List
interface Collection
List <|-- AbstractList
Collection <|-- AbstractCollection
Collection <|- List
AbstractCollection <|- AbstractList
AbstractList <|-- ArrayList
class ArrayList {
Object[] elementData
size()
}
enum TimeUnit {
DAYS
HOURS
MINUTES
}
@enduml
案例2:
@startuml
class Track
class Media

class Trip{
String tripID;
String tracks;
String medias;
}
Trip --> Track
Trip --> Media
interface ITripTrackCollection{
void start();
void stop();
void pause();
void destory();
}
class TripTrackCollection implements ITripTrackCollection{
Vector<LocationInfo> mLocations;
ExtcutorService mVecoterThread;
ScheduledExecutorService mDatabaseThread;
}
class TrackCollectService extends Service implements ITripTrackCollection{
TripTrackCollection TripTrackCollection;
}
TrackCollectService -->TripTrackCollection
@enduml
2. 流程图
案例1:
@startuml
(*) --> "check input"
If "input is verbose" then
--> [Yes] "turn on verbosity"

--> "run command"
else
--> "run command"
Endif
-->(*)
@enduml
案例2:
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
3. 时序图
案例1:
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
案例2:
@startuml
title Android Broadcast procedure
participant Activity #Lime
participant ContextWrapper #Cyan
participant ContextImpl #Cyan
participant ActivityManagerService #Cyan
participant ActivityStackSupervisor #Cyan
participant ActivityStack #Cyan
participant ApplicationThreadProxy #Silver
participant InnerReceiver #Magenta
participant ReceiverDispatcher #Magenta
participant BroadcastReceiver #Magenta
autonumber
Activity -> ContextWrapper : registerReceiver()
ContextWrapper -> ContextImpl : registerReceiver()
ContextImpl -> LoadedApk : getReceiverDispatcher()
LoadedApk -> ActivityManagerProxy : registerReceiver()
ActivityManagerProxy -> ActivityManagerService : registerReceiver()
Activity -> ContextWrapper : sendBroadcast()
ContextWrapper -> ContextImpl : sendBroadcast()
ContextImpl -> ActivityManagerService: broadcastIntent()
ActivityManagerService -> ActivityManagerService : broadcastIntentLocked()
ActivityManagerService -> ActivityManagerService : collectReceiverComponents()
ActivityManagerService -> ActivityManagerService : scheduleBroadcastsLocked()
ActivityManagerService -> ActivityManagerService : processNextBroadcast()
ActivityManagerService -> ActivityManagerService : deliverToRegisteredReceiverLocked()
ActivityManagerService -> ActivityManagerService : performReceiveLocked()
ActivityManagerService -> ApplicationThreadProxy : scheduleRegisteredReceiver()
ApplicationThreadProxy -> InnerReceiver : performReceive()
InnerReceiver -> ReceiverDispatcher : performReceive()
ReceiverDispatcher -> BroadcastReceiver : onReceive()
Activity -> ContextWrapper : sendOrderedBroadcast()
ContextWrapper -> ContextImpl : sendOrderedBroadcast()
ContextImpl -> ActivityManagerService: broadcastIntent()
@enduml
4. 用例图
@startuml
:Main Admin: as Admin
(Use the application) as (Use)
User -> (Start)
User --> (Use)
Admin ---> (Use)
note right of Admin : This is an example.
note right of (Use)
A note can also
be on several lines
end note
note "This note is connected\nto several objects." as N2
(Start) .. N2
N2 .. (Use)
@enduml
5. 状态图
@startuml
scale 350 width
[*] --> NotShooting
state NotShooting {
[*] --> Idle
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
}
state Configuring {
[*] --> NewValueSelection
NewValueSelection --> NewValuePreview : EvNewValue
NewValuePreview --> NewValueSelection : EvNewValueRejected
NewValuePreview --> NewValueSelection : EvNewValueSaved
state NewValuePreview {
State1 -> State2
}
}
@enduml
6. 组件图
案例1:
@startuml
package "Some Group" {
HTTP - [First Component]
[Another Component]
}
package "Other Groups" {
FTP - [Second Component]
[First Component] --> FTP
}
@enduml
案例2:
@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
热门推荐
双绞线电缆和光缆的优缺点是什么?
如何调节脱硝催化剂中的氧气浓度?
坚持涂防晒还变黑了?皮肤科医生:学会这几招,轻松选定防晒霜
如何评估黄金金砖的价格水平?这种价格水平受哪些因素制约?
肉冷冻可以放多久?不同肉类冷冻保存时间指南
易经六十四卦与五行的关系
虱子能看见吗?探讨虱子的可见性及识别方法
树木剪枝的最佳时间与方法是什么?合适的季节和技巧
地球在20亿年后会是什么样子?看看现在的金星就知道了!
肝脏分8段,S1和S8,这2段手术难度最高
基于收益影响因素的REITs投资策略分析
如何选择合适的外贸代理服务:关键因素与实用建议
梦见自己燃烧成灰烬
雄安律动丨在“未来之城”,看见“未来场景”
蔡骏新作《曹家渡童话》上市,重写一代人的上海故事
单位调岗3个前提条件,需遵循否则违法,但有例外情形!
如何避免被动调岗
75寸电视机安装高度的标准是多少?家居布置的科学指南
如何看待欧元量化宽松对黄金的作用?这种作用如何在投资中体现?
如何通过技术分析洞察黄金价格波动?技术分析在黄金投资中的局限性是什么?
补过牙后一般能维持几年?对比补牙牙位/材质/用牙习惯来详细了解
SUV车胎压多少是正常范围?图文详解胎压检查与调整要点
朱常洛:命运多舛的皇帝,短暂的统治与深远的影响
法务专员高效解决合同纠纷的5大人际沟通技巧
南京话,蛮摆滴!
服完药多久可以喝茶,服用后多长时间可以安全饮用茶水?
草莓的病虫害防治技术要点
乡村振兴在行动丨浙江温州:乡村职业经理人下乡,沃野走出新路子
花烛分株与繁殖完全指南:时间、方法与技巧详解
智能遥控钥匙与普通遥控钥匙的区别是什么?这种区别对车辆使用有何便利?