为掌握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

相关文章
|
5天前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
9天前
|
设计模式 Java API
【设计模式】JAVA Design Patterns——Combinator(功能模式)
【设计模式】JAVA Design Patterns——Combinator(功能模式)
|
2天前
|
设计模式 存储 前端开发
Java的mvc设计模式在web开发中应用
Java的mvc设计模式在web开发中应用
|
5天前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
7天前
|
设计模式 Java 数据库
【设计模式】JAVA Design Patterns——Converter(转换器模式)
转换器模式旨在实现不同类型间的双向转换,减少样板代码。它通过通用的Converter类和特定的转换器(如UserConverter)简化实例映射。Converter类包含两个Function对象,用于不同类型的转换,同时提供列表转换方法。当需要在逻辑上对应的类型间转换,或处理DTO、DO时,此模式尤为适用。
【设计模式】JAVA Design Patterns——Converter(转换器模式)
|
8天前
|
设计模式 安全 Java
Java设计模式
Java设计模式
5 1
|
8天前
|
设计模式 Java 数据库连接
JAVA设计模式解析与实战
本文探讨了Java中的常见设计模式,包括单例模式、工厂模式和观察者模式。单例模式确保类只有一个实例,常用于管理资源;工厂模式通过抽象工厂接口创建对象,降低了耦合度;观察者模式实现了一对多的依赖关系,当主题状态改变时,所有观察者都会收到通知。理解并运用这些设计模式能提升代码的复用性、可扩展性和可维护性。
|
9天前
|
设计模式 存储 Java
【设计模式】JAVA Design Patterns——Command(事务模式)
【设计模式】JAVA Design Patterns——Command(事务模式)
|
9天前
|
数据可视化 Java uml
Java的UML类图
Java的UML类图
11 1
|
10天前
|
设计模式 安全 NoSQL
【设计模式】JAVA Design Patterns——Abstract-document(抽象文档模式)
【设计模式】JAVA Design Patterns——Abstract-document(抽象文档模式)