图解设计模式——UML

简介: UML是让系统可视化、让规格和设计文档化的表现方法,是 unified modeling language 的简称。具体可以查看 http://ww.omg.org/uml 官方网站

图解设计模式——UML

UML

类图

接口与实现

聚合

可见性(访问控制)

类的关联

时序图

处理流与对象之间的协作

UML

UML是让系统可视化、让规格和设计文档化的表现方法,是 unified modeling language 的简称。


具体可以查看 http://ww.omg.org/uml 官方网站


类图

UML 中的类图(class diagram)用于表示类、接口、实例等之间相互的的静态关系。如下示例:

180d923279e34d699097dbd1613ea1d5.png


该图展示了 parentclass 和 childclass 两个类之间的关系,其中空心箭头表明两者之间的层次关系。


箭头由自雷指向父类,换言之,表示继承。

图中的长方形表示类,长方形内部被横线自上而下分为以下三个区域:


类名

字段名

方法名


有时,图中除了会写出类名、字段名和方法名等信息外,还会写出其他信息(可见性、方法的参数和类型等)。反之,有时图中也会省略所有不必要的项目(因此,我们无法确保一定可以根据类图生成源程序)。


abstract 类(抽象类)的名字以斜体方式显示

static 字段(静态字段)的名字带有下划线

abstract 方法(抽象方法)的名字以斜体显示

static 方法(静态方法)的名字以下划线显示

接口与实现

为了强调接口与抽象类的相似性,类图中会以斜体方式显示接口名称。空心箭头代表了接口与实现类的关系,箭头从实现类指向接口。


UML 以 <> 表示接口。如下图所示:


展示接口与实现类的类图:

6ed95398bf1041e087a2919e68dd049c.png

聚合

展示聚合关系的类图:

c46aa950abea445e901d86f26e207cbd.png

上图展示了 color(颜色)、fruit(水果)、basket(果篮)这三类之间的关系。basket 类中的 fruits 字段是可用存放 fruit 类型数据的数组,在一个 basket 类的实例中可以持有一个 color 类的实例。通俗地说就是在篮子里可以放入很多个水果,每个水果都有其自身的颜色。


我们将这种“持有”关系称为聚合。只有在一个类中持有另一个类的实例——无论是一个还是多个——它们之间就是聚合关系。就程序上而言,无论是使用数组、vector、list 或者其他实现方式,只要在一个类中持有另一个类的实例,它们就是聚合关系。


在 UML 中,我们使用带有空心菱形的实现表示聚合关系,因此可以进行联想记忆,将聚合关系想象为在空心菱形的器皿中装有其他物品。


可见性(访问控制)

be5eb4e400c946f696ee69e56d76083d.png

该图标识了方法和字段的可见性。在 UML 中可以通过在方法名和字段名前面加上记号来表示可见性。


“+” 表示 public 方法和字段,可以从类外部访问这些方法和字段

“-” 表示 private 方法和字段,无法从类外部访问这些方法和字段

“#” 表示 protect 方法和字段,能够访问这些方法和字段的只能是该类自身、该类的子类以及同包中的类

“~”表示只有同包中的类才能访问的方法和字段

类的关联

可以在类名前面加上黑三角表示累之间的关联关系,如下图所示:

4b42a57326d44b248d842cb66e35fa15.png


时序图

UML 的时序图(sequence diagram)用来表示程序在工作时其内部方法的调用顺序,以及事件的发生顺序。


类图中表示的是 “不因时间流逝而发生变化的关系(静态关系)”,时序图正好与之相反,表示的是 “随时间发生变化的东西(动态行为)”。


处理流与对象之间的协作

下图是一个时序图的例子:


6ac0e1037b6e40b7af90d3b14cc59f61.png


图中,右侧是时序图示例,左侧是与之对应的代码片段。


该图中共有三个实例,如图中最上方的三个长方形所示。长方形内部写有类名,类名跟在冒号(:)后面,并带有下划线。


:client、:server、:device 分别代表 client 类、server 类、device 类的实例。


如果需要,还可以在冒号(:)之前表示出实例名,如 server:Server。


每个实例都带有一个向下延伸的虚线,称为生命线,可以理解为时间从上向下流逝,上面是过去,下面是未来。生命线仅存在于实例的生命周期内。


在生命线上,有一些细长的长方形,它们表示实例处于某种活动中。


横方向上有许多箭头,请先看带有 open 字样的箭头。黑色实线箭头(->) 表示方法的调用,这里表示 client 调用 server 的 open 方法。当 server 的 open 方法被调用后,server 实例处于活动中,因此在 open 箭头处画出了一个细长的长方形。


而在 open 箭头画出的长方形下方,还有一条指向 client 实例的虚线箭头(<…),它表示返回 open 方法。在上图中,我们画出了所有的返回箭头,但是有些时序图也会省略掉返回箭头。


由于程序控制已经返回到 client,所以表示 server 实例处于活动状态的长方形就此结束了。接着,client 实例会调用 server 实例的 print 方法。不过这次不同的是在 print 方法中,server 会调用 device 实例的 write 方法。


这样,我们就将多个对象之间的行为用图示的方法展现出来了。时序图的阅读顺序是沿着生命线从上到下阅读。当遇到箭头时,我们可以顺着箭头所指的方向查看对象之间的协作。


相关文章
|
2月前
|
设计模式 Java 测试技术
Java设计模式-UML与设计原则(1)
Java设计模式-UML与设计原则(1)
|
3月前
|
设计模式 uml
设计模式常用的UML图------类图
这篇文章介绍了UML中类图的基本概念和用途,详细解释了类与接口、类之间的关系,包括继承、实现、组合、聚合、关联和依赖等六种关系,并展示了它们在类图中的表示方法。
设计模式常用的UML图------类图
|
5月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
39 2
|
5月前
|
设计模式 数据可视化 程序员
设计模式学习心得之前置知识 UML图看法与六大原则(上)
设计模式学习心得之前置知识 UML图看法与六大原则(上)
44 0
|
6月前
|
设计模式 数据可视化 关系型数据库
设计之美-揭秘设计模式、原则与UML的魔法
设计模式、设计原则和UML是软件工程设计中的核心要素。设计模式为常见问题提供经验证的解决方案,复用性高且提升开发效率。设计原则指导我们创建灵活、可维护和可扩展的系统,确保代码质量和长期可维护性。UML(统一建模语言)则是一种强大的可视化工具,用于描述、构建和文档化软件系统的结构和行为。它帮助开发者更清晰地理解系统架构和组件间关系。综合应用设计模式、设计原则和UML,能够显著提高软件开发的效率和质量,减少维护成本,为复杂系统的设计和实施提供有力支持。
101 0
设计之美-揭秘设计模式、原则与UML的魔法
|
6月前
|
设计模式 关系型数据库 程序员
UML中常用设计模式OCP、单例模式、简单工厂模式等模式讲解及C#中代码实现(附源码)
UML中常用设计模式OCP、单例模式、简单工厂模式等模式讲解及C#中代码实现(附源码)
75 0
|
设计模式 数据可视化 程序员
设计模式概述、UML图、软件设计原则
设计模式概述 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。 1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ra
70 0
|
设计模式 IDE 测试技术
【设计模式——学习笔记】设计模式前置知识:UML类图入门
【设计模式——学习笔记】设计模式前置知识:UML类图入门
62 0
|
设计模式 uml
设计模式——概述、UML图、原则(二)
设计模式——概述、UML图、原则
183 0
设计模式——概述、UML图、原则(二)
|
设计模式 数据可视化 程序员
设计模式——概述、UML图、原则(一)
设计模式——概述、UML图、原则
198 0
设计模式——概述、UML图、原则(一)

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    42
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    46
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    53
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    37
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    61
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    56
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    40
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    49
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    105
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    75