用代码画时序图!YYDS

欢迎关注方志朋的博客,回复”666“获面试宝典

前言

最近通过代码来画时序图,UML用例图,感觉很不错,所以给大家分享一下。

日常开发,一般在设计阶段,我们都需要画时序图、用例图等等。大家平时画图的时候,是用draw.io还是processOn呢?用它们画出的图,其实都很挺好看的。但是呢,今天田螺哥介绍一个款开源的画图神器!用代码就能画图,配合IDE使用,画图高效简单,信手拈来,还挺美观的。这个神器就是PlantUML

762be62fec03f88f1bd1fcbb1a89a0c4.jpeg

1. PlantUML 简介

PlantUML是一个开源项目,可以快速编写UML图的工具。它可以支持编码的方式来生成图形。可以用来画时序图、UML用例图、类图、思维导图、ER图等等。

PlantUML 画出来的图,简洁美观,先给大家看看,一个用PlantUML画出来的登录时序图,以及对应画图的代码,如下:

/**
 * 关注公众号:键捡田螺的小男孩
 */
@startuml
title Sequence Diagram of User login
actor User as user

participant "gateway" as gateway
participant "user-core" as userCore
database "MySQL" as mysql
database "Redis" as redis

autonumber
user-> gateway:login request,param:username,password
activate gateway
gateway-> userCore:forward the login request
activate userCore
userCore-> userCore :check the login param
userCore-> mysql:query user info from mysql by username
activate mysql
mysql-> userCore:response with username and password
deactivate mysql
userCore->userCore:compare the requested password with the DB's password
userCore-> userCore: generate an unique token
userCore--> redis: save the token to redis
userCore-> gateway: response with the token
deactivate userCore
gateway-> user: login success with the token
deactivate gateway
@enduml

登录用例时序图如下:

68873450c9b365a5520449f04d1ad70b.png

2. PlantUML的安装使用

PlantUML的安装很方便的.有个插件,名字是:PlantUML Integration,大家可以去IDE的插件市场,搜索安装即可,如下:

932a889b0dc65b4f098d8df1fa415fd1.jpeg

安装成功后,想快速体验一般的话.可以新建一个项目,然后新建一个plantUML File文件,然后把我上个小节,登录时序图那个代码复制进去,就可以看到登录时序图啦.

a1ed0d28b8930057fdd37595712cf96b.jpeg (如果是非时序图,希望即时展示,需要安装下Graphviz哈)

3.如何用PlantUML 画时序图

什么是时序图?

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。

如何用PlantUML画时序图呢?

你可以先新建一个PlantUML文件

f9b895218edcd771d0d977dd805eac0c.jpeg

然后选择Sequence,并定义一个文件名称

0a2921a1c19698815be1683a819db06e.jpeg

就会有默认的时序图生成啦.

92f731fe8dcfb262f441dfc973626694.jpeg

我们照着登录时序图的代码,来大概说下每个关键词的意思吧.

/**
 * 关注公众号:键捡田螺的小男孩
 */
@startuml
title Sequence Diagram of User login
actor User as user

participant "gateway" as gateway
participant "user-core" as userCore
database "MySQL" as mysql
database "Redis" as redis

autonumber
user-> gateway:login request,param:username,password
activate gateway
gateway-> userCore:forward the login request
activate userCore
userCore-> userCore :check the login param
userCore-> mysql:query user info from mysql by username
activate mysql
mysql-> userCore:response with username and password
deactivate mysql
userCore->userCore:compare the requested password with the DB's password
userCore-> userCore: generate an unique token
userCore--> redis: save the token to redis
userCore-> gateway: response with the token
deactivate userCore
gateway-> user: login success with the token
deactivate gateway
@enduml

关键词解释如下:

  • title:表示该UML用例图的标题

  • actor:表示人形的参与者

  • as: 使用as 关键字命名参与者。你可以把它理解成定义变量一样,as后面跟着的就是变量,声明后,我们后面就可以使用这个变量啦

  • participant:表示普通的参与者,它跟actor的主要区别是:形状不一样

  • database:表示参与者形状是数据库.

  • 显示的顺序是怎么定义的:声明的参与者顺序将是(默认的)显示顺序。

  • autonumber:可以给参与者添加顺序

  • ->:表示绘制两个参与者之间的信息,如果你希望是虚线,可以使用-->.

  • activatedeactivate:表示参与者的生命线

当然,PlantUML功能挺丰富的,它还可以组合消息,虽然在我的登录时序图还没体现出来. 它提供了alt/else、opt、loop来组合消息.如下:

@startuml
Alice -> Bob: 认证请求

alt 登录成功

    Bob -> Alice: 认证接受

else 某种失败情况

    Bob -> Alice: 认证失败
    group 我自己的标签
    Alice -> Log : 开始记录攻击日志
        loop 1000次
            Alice -> Bob: DNS 攻击
        end
    Alice -> Log : 结束记录攻击日志
    end

else 另一种失败

   Bob -> Alice: 请重复

end
@enduml

对应的时序图如下:

5cd6188fd5e1adff15e277b611176c00.png

4. 如何用PlantUML 画UML用例图

什么是用例图?

用例图(英语:use case diagram)是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。

如何用PlantUML画UML用例图呢?

你可以先新建一个PlantUML文件,然后选择user case,并定义个文件名

25b0063381ab5c1d6df4b34ce9f50bbb.jpeg

就会有默认的UML用例图生成啦

e08b5f3dd73e6296a358629d9a04b7e8.jpeg

我挑官网一个用例图demo来介绍吧,代码如下:

@startuml
left to right direction
actor Guest as g
package Professional {
  actor Chef 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
}
fc --> UC4
g --> UC1
g --> UC2
g --> UC3
@enduml

对应生成的用例图如下:

057aa91e561898e710457d43a3df88a6.jpeg

来看下每个关键词的意思:

  • left to right direction:表示从左到右绘制用例图

  • actor Guest as g:定义一个人形参与者,变量别名是g.

  • package Professional:定义一个包package,名字为Professional.package可以用来对用例和角色分组.

  • usecase "Eat Food" as UC1:定义一个用例,别名为UC1.

  • fc --> UC4:表示角色fc和用例UC4关联起来.角色和用例之间的关系,用-->来表示。

5. 如何用plantUML 画思维导图

什么是思维导图?

英文是The Mind Map,又名心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效同时又很高效,是一种实用性的思维工具。

写了一个简单的思维导图,代码如下:

@startmindmap
* 公众号:捡田螺的小男孩,干货面试题
** 计算机网络面试题
*** TCP/IP十五连问
*** 两万字计算机面试题汇总
** MySQL面试题
** Redis面试题
** 大厂面试真题
*** 虾皮十五连问
*** 五年Oppo后端面试真题
*** 腾讯云十五连问
@endmindmap

plantUML画思维导图,还是挺简单的,大家可以看下效果

b5ae6d59793db975aa55c9af2f1ddd9c.jpeg

6. 如何用planUML 画活动流程图

什么是活动图?

动态图(activity diagram,活动图)是阐明了业务用例实现的工作流程。

我画了一个简单版的登录活动流程图:

@startuml
title Activity Diagram of User login

start
:user request login;
if (is request param null?) then (N)
  :query user info by username;
  if (is user info  null ?) then (N)
    :compare the password;
    if (Is password right?) then (Y)
      :generate a token ,and set it to redis;
      :response with login success;
    else(N)
       :response with wrong password code;
       stop
    endif
  else(Y)
    :response with error userinfo;
    stop
  endif
else(Y)
  :response with error param;
  stop
  endif
stop
@enduml

生成的流程图如下:

df8f482df572ba0fda84e42bb67b9e30.jpeg

活动图关键解释如下:

  • start表示活动图流程的开始

  • stop表示活动图流程的结束

  • :user request login;:表示活动流程节点为user request login,需要加:;的哈

  • if+then+endif表示一个完整的条件判断

热门内容:解决打开IDEA 对 CPU占用率巨大的问题
4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
还在用Xshell?你out了,推荐一个更现代的终端连接工具
 
 

ec2446ea41b922f6940bcd7f3189d7be.jpeg

 
 
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值