IDEA生成UML类图(PlantUML)
- 前言
- 安装
- 安装IDEA插件
- 安装Graphviz
- 使用
- 选择
- 绘制
- 保存
- 案例
- 最后
前言
统一建模语言(UML)相信大家都不陌生,在软件工程的各个阶段均有应用。其中,类图是在详细设计阶段,经常要使用到的一种图。
画类图的工具有很多,专用的绘制软件有Visio。Visio的功能比较强大,不仅仅是软件方面的绘图,其他的流程图、房屋平面图、网络设备架构图等,Visio都可以胜任。但大家在绘制UML的时候,可能更倾向于一些轻量级的软件,例如MindMaster、ProcessOn等。而且一般公司的Wiki平台,也会提供一些绘制UML的功能。
除此以外,在专业版IDEA中还有Diagrams这个功能。Diagrams应该是大家分析代码设计模式的大杀器,因为他可以自动生成类图。Diagrams生成类图虽然快速,但我们无法对其进行修改调整。并且只能绘制类图,不支持其他类型的图。
这里介绍IDEA一个绘制UML的插件——PlantUML。PlantUML是一门描述UML的语言,可以用代码的方式生成想要的UML图。总的来看,这门语言并不复杂,官网(PlantUML)提供了详细的案例,可以在20分钟左右的时间内掌握特定图的编写。让你有种使用Markdown来绘制UML的感觉,相信某些人会喜欢的。
下面简单介绍IDEA中PlantUML的安装,以及简单的使用案例。
安装
安装IDEA插件
在Plugins中查找PlantUML,安装如下两个插件:
- PlantUML Integration:PlantUML绘图工具集成。
- PlantUML Parser:Java源代码转PlantUML解析器。
安装Graphviz
Graphviz是由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。PlantUML需要依赖Graphviz中的工具包。
Mac OS可用Homebrew安装:
brew install graphviz
使用
选择
在工程中新建PlantUML File。
选择图类型。
绘制
新建的文件都会给出Demo,并给出了官网链接,现在就可以开始绘图了。
保存
可输出为png图片格式。
案例
使用
类图
配置文件
@startuml
Observable ..> Cycle
ObservableThread ..> TaskLifeCycle
ObservableThread ..> Task
TaskLifeCycle ..> Thread
enum Cycle{
STARTED
RUNNING
DONE
ERROR
}
note left of Cycle:任务的生命周期枚举
interface Observable
{
+ Cycle getCycle()
+ void start()
+ void interrupt()
}
note left of Observable:定义可观测性
interface TaskLifeCycle{
+ void onStart(Thread thread)
+ void onRunning(Thread thread)
+ void onFinish(Thread thread,T result)
+ void onError(Thread thread,Exception e)
}
note left of TaskLifeCycle:定义任务执行的生命周期中\n会被触发的方法
class EmptyLifecycle implements TaskLifeCycle{
+ void onStart(Thread thread)
+ void onRunning(Thread thread)
+ void onFinish(Thread thread,T result)
+ void onError(Thread thread,Exception e)
}
note left of EmptyLifecycle:TaskLifeCycle的默认实现。
class Thread{
+ void run()
}
interface Task{
+ T call()
}
note right of Task:Runnable类不具备可观测性,\n这里使用Task类代替
class ObservableThread extends Thread implements Observable{
- TaskLifeCycle<T> lifeCycle
- Task<T> task
- Cycle cycle
+ ObservableThread(Task<T> task)
+ ObservableThread(TaskLifeCycle<T> lifeCycle, Task<T> task)
+ void run()
+ Cycle getCycle()
}
note left of ObservableThread:实现任务监控的关键\n继承Thread,实现TaskLifeCycle接口
@enduml
最后
PlantUML并不一定适合所有人,全看个人喜好。就像UML的格式就有很多种,本身UML也是个可选项。一切都服务于需求,我们应该根据不同的需求选择合适的工具。