为掌握Java设计模式奠基:两步搞懂UML类图

简介: 为掌握Java设计模式奠基:两步搞懂UML类图

前言


在学习了一段时间的框架以及Spring Boot微服务架构以后,愈发的感觉到Java设计模式在实际项目开发中的重要性,一个好的设计模式能够避免之后很多问题的出现。以前写的代码可以说没有设计模式可言,以至于之后项目中要拓展一个功能时,代码量以及难度不亚于重构一次项目,因此决定开始学习Java设计模式,在此做一个记录。

工欲善其事,必先利其器在学习设计模式的过程中,采用的开发工具为Idea,画类图使用的工具为PowerDesigner本文将介绍UML类图的概念

一、UML类图的基本概念


什么是类图:类图是结构图,常被用于描述一个系统的静态结构。 一个类图中通常包含有类的UML图、接口的UML图以及泛化关系的UML图、关联关系的UML图、依赖关系的UML图和实现关系的UML图

1、类与接口在类图中的表示方法


①、类

在UML中,通常使用一个长方形来描述一个类的主要构成,将长方形垂直地分为三层

  1. 第一层:名字层
    在这一层中列出类的名称,来区分类为具体类还是抽象类
    如果类的名字是常规字形,表示该类是具体类;如果类的名字是斜体字形,表明该类时抽象类
  2. 第二层:变量层(也叫属性层)

在这一层中列出类的成员变量以及类型,格式为:“变量名字:类型

如果变量的访问权限为public,在变量的名字前面使用“+” 符号修饰;

如果变量的访问权限为protected,在变量的名字前面用“#” 符号修饰;

如果变量的访问权限为private,在变量的名字前面用“-” 符号修饰;

如果变量的访问权限为默认(Default),变量的名字前面不使用任何符号修饰

变量的访问权限 修饰符号
public +
private -
protected #
默认(Default) 不加修饰符

  1. 第三层:方法层(也叫操作层)
    在这一层中列出类的方法及返回类型,格式为:“方法名字(参数列表):类型
    修饰方法的符号与变量的修饰符号基本相同
方法的访问权限 修饰符号
public +
private -
protected #
static 方法名下加下划线
默认(Default) 不加修饰符

图示:

image.png

②、接口

UML表示接口和UML类图表示类的UML图类似,也是使用一个长方形描述一个接口的主要构成,将长方形垂直分为三层

  1. 第一层:名字层在这一层中接口的名字必须是斜体字形并且需要用用<<interface>>修饰名字
    修饰放在第一行,名字放在第二行
  2. 第二层:常量层在这一层中列出接口中的常量以及类型,格式为:“常量名字:类型
    Java接口中常量的访问权限都是public的,所以需要在常量名字前面用“+”符号修饰
  3. 第三层:方法层(也叫操作层)在这一层中列出类的方法及返回类型,格式为:“方法名字(参数列表):类型

同样,Java接口中方法的访问权限都是public的,所以需要在方法名字前面用               “+”    符号修饰

image.png

二、类图间的基本关系


1、关联关系


假设目前有两个类A和B,如果A类中的成员变量是用B类(接口)来声明的变量,那么A类和B类的关系是关联关系,称A关联于B。

如果A关联于B,那么UML类图中通过使用一条实线来连接A和B的UML图实线的起始端是A类的UML图,终点端是B的UML类图,终点使用一个指向B的UML图的方向箭头表示实线结束

image.png

①、聚合关系

聚合关系属于关联关系中的一种,是较强的关联关系,强调的是整体与部分之间的关系。在聚合关系中,成员对象是整体对象的一部分,

但是成员对象可以脱离整体对象独立存在。例如学校和学生之间的关系就可以说是一种聚合关系,学生是学校的一部分,学生也可以脱离学校独立存在

在UML中,聚合关系在关联关系带方向箭头实线的另一端上加一个空心菱形来表示

图示:

image.png

②、组合关系

组合关系也表示类之间整体和部分的关系,聚合关系说的是成员对象可以脱离整体对象而独立存在,相反地,组合关系说的是成员对象脱

离了整体对象以后不能独立存在。在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象和整体对象之间具有同生共死的关系。例如人的身体和心脏就是组合关系,当人的身体被毁灭时人的心脏同样也会被毁灭,并且人的心脏也无法脱离人的身体而独立存在

在UML中,聚合关系在关联关系带方向箭头实线的另一端上加一个实心菱形来表示

图示:

image.png

2、泛化关系(继承关系)


对于面向对象语言来说,UML中所说的泛化关系其实就是指类的继承关系。如果一个类是另一个类的子类,那么UML中通过使用一条实

线连接两个类的UML图来表示二者之间的继承关系实线的起始端是子类的UML图,终点端是父类的UML图,在终点端使用一个空心三角形表示实线的结束

图示:

image.png

3、依赖关系


假设目前有两个类A和B,如果A类中的某个方法的参数是用B类(接口)来声明的变量或者某个方法返回的数据类型是B类型的,那么A类和B类的关系是依赖关系,称A依赖于B。

如果A依赖于B,那么UML类图中通过使用一条虚线来连接A和B的UML图虚线的起始端是A类的UML图,终点端是B的UML类图,终点使用一个指向B的UML图的方向箭头表示虚线结束

图示:

image.png

4、实现关系


如果一个类实现了一个接口,那么类和接口的关系就是实现关系UML通过使用虚线连接类和它所实现的接口虚线的起始端是类,虚线的终点端是它实现的接口,终点端使用一个空心的三角形表示虚线的结束

图示:

image.png

总结


以上便是UML类图中的基本概念,在Java开发的过程中,使用好的设计模式能够写出更为优雅的代码,不会出现添加一个小功能,需要的代码量几乎相当于重写一次项目。在这里做一个简单的记录,作为学习Java设计模式的开始。

      设计模式是软件行业的经验总结,因此不管使用什么样的编程语言,Java也好,Python也罢,设计模式都可以自由的“侵入”,因为它不是工具,所以设计模式没有一个具体测量的标尺,它不是一种具体的技术,它更是一种指导思想,完全以自己的理解为准,自己有多了解设计模式,就有可能产生多么优秀的代码和设计!

      愿所有的平凡都伟大,愿所有的苟且都开花,期望能够在成为架构师的道路上越走越远!

其它设计模式传送门:


单例模式: 关于单例模式,你应该了解这些

工厂方法模式:你应该了解的工厂方法模式:优雅的代码永不过时

附:PowerDesigner下载链接:


链接: https://pan.baidu.com/s/1DOLSdrrqFYYbKQMd2Xrzag .

提取码:xhzy

相关文章
|
8天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
23 0
[Java]23种设计模式
|
24天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
24天前
|
设计模式 Java
Java设计模式
Java设计模式
24 0
|
27天前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
26 0
|
27天前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
39 0
|
27天前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
37 0
|
2月前
|
设计模式 缓存 算法
Java设计模式-访问者模式(22)
Java设计模式-访问者模式(22)