乐趣区

关于java:横空出世IDEA画图神器来了比Visio快10倍

程序员在工作中,常常会有绘制时序图、流程图的需要,尤其是在写文档的时候。平时咱们会抉择 ProcessOn 这类工具来绘制,但有时候用代码来画图可能会更高效一点,毕竟没有比程序员更相熟代码的了。明天给大家举荐一款画图工具 PlantUML,能够配合 IDEA 应用,画图更高效!

SpringBoot 实战电商我的项目 mall(50k+star)地址:https://github.com/macrozheng/mall

PlantUML 简介

PlantUML 是一款开源的 UML 图绘制工具,反对通过文原本生成图形,应用起来十分高效。能够反对时序图、类图、对象图、流动图、思维导图等图形的绘制。

上面应用 PlantUML 来绘制一张流程图,能够实时预览,速度也很快!

装置

通过在 IDEA 中装置插件来应用 PlantUML 无疑是最不便的,接下来咱们来装置下 IDEA 的 PlantUML 插件。

  • 首先在 IDEA 的插件市场中搜寻PlantUML,装置这个排名第一的插件;

  • 有时候网络不好的话可能下载不下来,能够点击 Plguin homepage 按钮拜访插件主页,而后抉择适合的版本下载压缩包;

  • 下载胜利后,抉择从本地装置即可。

应用

接下来咱们应用 PlantUML 插件别离绘制时序图、用例图、类图、流动图、思维导图,来体验下 PlantUML 是不是真的好用!

时序图

时序图(Sequence Diagram),是一种 UML 交互图。它通过形容对象之间发送音讯的工夫程序显示多个对象之间的动静合作。咱们在学习 Oauth2 的时候,第一步就是要搞懂 Oauth2 的流程,这时候有个时序图帮忙可就大了。上面咱们应用 PlantUML 来绘制 Oauth2 中应用受权码模式颁发令牌的时序图。

  • 首先咱们须要新建一个 PlantUML 文件,抉择时序图;

  • 咱们能够通过 PlantUML 提供的语法来生成 Oauth2 的时序图,语法还是非常简单的,具体内容如下;
@startuml
title Oauth2 令牌颁发之受权码模式

actor User as user
participant "User Agent" as userAgent
participant "Client" as client
participant "Auth Login" as login
participant "Auth Server" as server

autonumber
user->userAgent: 拜访客户端
activate userAgent
userAgent->login: 重定向到受权页面 +clientId+redirectUrl
activate login
login->server: 用户名 + 明码 +clientId+redirectUrl
activate server
server-->login: 返回受权码
login-->userAgent: 重定向到 redirectUrl+ 受权码 code
deactivate login
userAgent->client: 应用受权码 code 换取令牌
activate client
client->server: 受权码 code+clientId+clientSecret
server-->client: 颁发拜访令牌 accessToken+refreshToken
deactivate server
client-->userAgent: 返回拜访和刷新令牌
deactivate client
userAgent--> user: 令牌颁发实现
deactivate userAgent
@enduml
  • 该代码将生成如下时序图,用写代码的形式来画时序图,是不是够炫酷;

  • 本时序图要害阐明如下:

    • title能够用于指定 UML 图的题目;
    • 通过 actor 能够申明人形的参与者;
    • 通过 participant 能够申明一般类型的参与者;
    • 通过 as 能够给参与者取别名;
    • 通过 -> 能够绘制参与者之间的关系,虚线箭头能够应用-->
    • 在每个参与者关系前面,能够应用 : 给关系增加阐明;
    • 通过 autonumber 咱们能够给参与者关系主动增加序号;
    • 通过 activatedeactivate能够指定参与者的生命线。
  • 这里还有个比拟神奇的性能,当咱们右键时序图时,能够生成一个在线拜访的链接;

  • 间接拜访这个链接,能够在线拜访 UML 时序图,并进行编辑,是不是很酷!

用例图

用例图(Usecase Diagram)是用户与零碎交互的最简示意模式,展示了用户和与他相干的用例之间的关系。通过用例图,咱们能够很不便地示意出零碎中各个角色与用例之间的关系,上面咱们用 PlantUML 来画个用例图。

  • 首先咱们须要新建一个 PlantUML 文件,抉择用例图,该用例图用于示意顾客、主厨、美食家与餐馆中各个用例之间的关系,具体内容如下;
@startuml
left to right direction
actor Guest as g
package Professional {
    actor Chief as c
    actor "Food Critic" as fc
}
package Restaurant {
    usecase "Eat Food" as uc1
    usecase "Pay For Food" as uc2
    usecase "Drink" as uc3
    usecase "Review" as uc4
}
g--> uc1
g--> uc2
g--> uc3
fc--> uc4
@enduml
  • 该代码将生成如下用例图;

  • 本用例图要害阐明如下:

    • left to right direction示意按从左到右的程序绘制用例图,默认是从上到下;
    • 通过 package 能够对角色和用例进行分组;
    • 通过 actor 能够定义用户;
    • 通过 usecase 能够定义用例;
    • 角色和用例之间的关系能够应用 --> 来示意。

类图

类图(Class Diagram)能够示意类的动态构造,比方类中蕴含的属性和办法,还有类的继承构造。上面咱们用 PlantUML 来画个类图。

  • 首先咱们须要新建一个 PlantUML 文件,抉择类图,该图用于示意 Person、Student、Teacher 类的构造,具体内容如下;
@startuml
class Person {
    # String name
    # Integer age
    + void move()
    + void say()}
class Student {
    - String studentNo
    + void study()}
class Teacher {
    - String teacherNo
    + void teach()}
Person <|-- Student
Person <|-- Teacher
@enduml
  • 该代码将生成如下类图,看下代码和类图,是不是发现和咱们用代码定义类还挺像的;

  • 本类图要害阐明如下:

    • 通过 class 能够定义类;
    • 通过在属性和办法右边加符号能够定义可见性,-示意 private# 示意 protected+ 示意public
    • 通过 <|-- 示意类之间的继承关系。

流动图

流动图(Activity Diagram)是咱们用的比拟多的 UML 图,常常用于示意业务流程,比方电商中的下单流程就能够用它来示意。上面咱们用 PlantUML 来画个流动图。

  • 首先咱们须要新建一个 PlantUML 文件,抉择流动图,这里应用了 mall 我的项目中购物车中生成确认单的流程,具体内容如下;
@startuml
title 生成确认单流程
start
: 获取购物车信息并计算好优惠;
: 从 ums_member_receive_address 表中 \n 获取会员收货地址列表;
: 获取该会员所有优惠券信息;
switch(依据 use_type 判断每个优惠券是否可用)
case(0)
    : 全场通用;
    if (判断所有商品总金额是否 \n 满足应用终点金额) then (否)
        : 失去用户不可用优惠券列表;
        stop
    endif
case(-1)
    : 指定分类;
    if (判断指定分类商品总金额 \n 是否满足应用终点金额) then (否)
        : 失去用户不可用优惠券列表;
        stop
    endif
case(-2)
    : 判断指定商品总金额是否满足应用终点金额;
    if (判断指定分类商品总金额 \n 是否满足应用终点金额) then (否)
        : 失去用户不可用优惠券列表;
        stop
    endif
endswitch
: 失去用户可用优惠券列表;
: 获取用户积分;
: 获取积分应用规定;
: 计算总金额,流动优惠,应酬金额;
stop
@enduml
  • 该代码将生成如下流动图,在流动图中咱们既能够用if else,又能够应用switch,甚至还能够应用while 循环,性能还是挺弱小的;

  • 本流动图要害阐明如下:

    • 通过 startstop能够示意流程的开始和完结;
    • 通过 :;两头增加文字来定义流动流程节点;
    • 通过 if+then+endif 定义条件判断;
    • 通过 switch+case+endswitch 定义 switch 判断。

思维导图

思维导图(Mind Map),是表白发散性思维的无效图形工具,它简略却又很无效,是一种实用性的思维工具。之前在我的 mall 学习教程中就有很多中央用到了,上面咱们用 PlantUML 来画个思维导图。

  • 首先咱们须要新建一个 PlantUML 文件,抉择思维导图,这里应用了 mall 学习路线中的纲要视图,具体内容如下;
@startmindmap
+[#17ADF1] mall 学习路线
++[#lightgreen] 举荐材料
++[#lightblue] 后端技术栈
+++_ 我的项目框架
+++_ 数据存储
+++_ 运维部署
+++_ 其余
++[#orange] 搭建我的项目骨架
++[#1DBAAF] 我的项目部署
+++_ Windows 下的部署
+++_ Linux 下应用 Docker 部署
+++_ Linux 下应用 Docker Compose 部署
+++_ Linux 下应用 Jenkins 自动化部署
--[#1DBAAF] 电商业务
---_ 权限治理模块
---_ 商品模块
---_ 订单模块
---_ 营销模块
--[#orange] 技术要点
--[#lightblue] 前端技术栈
--[#lightgreen] 进阶微服务
---_ Spring Cloud 技术栈
---_ 我的项目部署
---_ 技术要点
--[#yellow] 开发工具
--[#lightgrey] 扩大学习
@endmindmap
  • 该代码将生成如下思维导图,其实应用 PlantUML 咱们能够本人定义图形的款式,这里我自定义了下色彩;

  • 本思维导图要害阐明如下:

    • 通过 +-能够示意思维导图中的节点,具备方向性;
    • 通过 [# 色彩] 能够定义节点的边框色彩;
    • 通过 _ 能够去除节点的边框;

总结

尽管目前能够绘制 UML 图的图形化工具很多,然而对于程序员来说,应用代码来绘图可能更间接,效率更高,尤其是配合 IDEA 应用。如果你想应用代码来绘图,无妨尝试下 PlantUML 吧。

参考资料

官网文档:https://plantuml.com/zh/

本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家 Star!

退出移动版