深入了解Java设计模式之UML类图

 更新时间:2022年11月21日 09:27:52   作者:准Java全栈开发工程师  
UML 即 Unified Modeling Language 统一建模语言,是用来设计软件的可视化建模语言。本文就带大家了解一下UML中类图的定义与使用,感兴趣的小伙伴可以跟随小编一起学习一下

前言:什么是 UML

定义:UML 即 Unified Modeling Language 统一建模语言,是用来设计软件的可视化建模语言。

特点:简单、统一、图形化、可以表达软件设计中的动态与静态信息。

分类:用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图 9 种。

类图概念

定义:类图是面向对象建模的主要组成部分,显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等,但不显示暂时性的信息。

作用:系统分析和设计阶段的重要产物,系统编码和测试的重要模型。

类的表示方式

可见性符号

  • + :表示 public
  • - :表示 private
  • # :表示 protected
  • 什么都不写 表示 default

属性的表示方式:可见性 属性名 : 属性类型 [ = 默认值]

方法的表示方式:可见性 方法名(参数列表) [ : 返回值类型]

其中,[ ] 里的内容是可选的,可写可不写。

public class Employee {
    private String name;
    private int age;
    private String address;
    public void work(){
        // doSomething
    }
}

类与类之间关系的表示方式

关联关系

关联关系是对象之间的一种引用关系,用于表示一个类对象对另一个类对象之间的联系。

关联关系也是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系

关联又分为单向关联、双向关联和自关联。

单向关联

单向关联使用带箭头的实直线表示,箭头指向被引用的对象。

public class Address {
}

public class Customer {
    private Address address;
}

双向关联

双向关联使用不带箭头的实直线表示,因为双方各自都持有对方类型的成员变量,所以不用使用箭头刻意的表示谁引用了谁。

public class Product {
    private Customer customer;
}

public class Customer {
    private List<Product> products;
}

自关联

自关联使用一个带箭头且指向自己的实直线表示,自己包含自己。

public class Node {
    private Node subNode;
}

聚合关系

聚合关系其实是关联关系的一种,是强关联关系,是整体和部分之间的关系。

聚合关系通过成员对象来实现,其中成员对象是整体对象的一部分,但成员对象可以脱离整体对象而独立存在。如:大学(整体)里有很多老师(部分),这些老师属于这个大学,但他们又可以脱离学校单独存在。

聚合关系使用带空心菱形的实直线来表示,菱形指向整体。

组合关系

组合关系是一种更强烈的聚合关系,同样表示的是类之间整体和部分的关系,但相较于聚合关系,组合关系中的整体对象可以控制部分对象的生命周期,一旦整体对象不存在了,部分对象也将不复存在。如:头(整体)和嘴(部分)的关系,头没了,嘴自然也不在了。

组合关系使用带实心菱形的实直线表示,菱形指向整体。

public class Head {
    private Mouth mouth;
}

public class Mouth {
    public void eat() {
        // doSomething
    }
}

依赖关系

依赖关系是一种使用关系,是对象之间耦合性最弱的一种关联方式,是临时性的关联。使用场景主要为某个类的方法通过局部变量、方法的参数来访问另一个类(被依赖类)中的某些方法。

依赖关系使用带箭头的虚直线表示,箭头指向被依赖类

public class Car {
    public void move() {
        // doSomething
    }
}

public class Driver {
    private String name;
    public void drive(Car car) {
        car.move();
    }
}

继承关系

继承关系是对象之间耦合性最大的一种关系,表示一般与特殊的关系,是父子类之间的一种继承关系。

继承关系又可称为泛化关系,使用带空心三角箭头的实直线表示,箭头从子类指向父类

public class Person {
    private String name;
    private int age;
    public void speak() {
        // doSomething
    }
}

public class Student extends Person{
    private String studentNo;
    public void study() {
        // doSomething
    }
}

public class Teacher extends Person{
    private String teacherNo;
    public void teach() {
        // doSomething
    }
}

实现关系

实现关系是接口与实现类之间的关系。

实现关系使用带空心三角箭头的虚线表示,箭头从实现类指向接口,箭头也是虚线。

public interface Vehicle {
    void move();
}

public class Car implements Vehicle {
	@Override
    public void move() {
        // doSomething
    }
}

public class Ship implements Vehicle {
    @Override
    public void move() {
        // doSomething
    }
}

到此这篇关于深入了解Java设计模式之UML类图的文章就介绍到这了,更多相关Java UML类图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈java安全编码指南之堆污染

    浅谈java安全编码指南之堆污染

    什么是堆污染呢?是指当参数化类型变量引用的对象不是该参数化类型的对象时而发生的。我们知道在JDK5中,引入了泛型的概念,在创建集合类的时候,指定该集合类中应该存储的对象类型。如果在指定类型的集合中,引用了不同的类型,那么这种情况就叫做堆污染。
    2021-06-06
  • 使用mtrace追踪JVM堆外内存泄露的方法

    使用mtrace追踪JVM堆外内存泄露的方法

    这篇文章主要给大家介绍了如何使用mtrace追踪JVM堆外内存泄露,文章通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-09-09
  • spring cglib 与 jdk 动态代理

    spring cglib 与 jdk 动态代理

    本篇文章主要介绍了spring cglib与jdk动态代理的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • 详解java==运算符和equals()方法的区别

    详解java==运算符和equals()方法的区别

    这篇文章主要介绍了java==运算符和equals()方法的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 解决Hibernate4执行save()或update()无效问题的方法

    解决Hibernate4执行save()或update()无效问题的方法

    这篇文章主要为大家详细介绍了解决Hibernate4执行save()或update()无效问题的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Springboot 中的 Filter 实现超大响应 JSON 数据压缩的方法

    Springboot 中的 Filter 实现超大响应 JSON 数据压缩的方法

    这篇文章主要介绍了Springboot 中的 Filter 实现超大响应 JSON 数据压缩,定义GzipFilter对输出进行拦截,定义 Controller该 Controller 非常简单,主要读取一个大文本文件,作为输出的内容,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Spring Cloud Stream 高级特性使用详解

    Spring Cloud Stream 高级特性使用详解

    这篇文章主要为大家介绍了Spring Cloud Stream 高级特性使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Mybatis-Plus中分页插件PaginationInterceptor的使用

    Mybatis-Plus中分页插件PaginationInterceptor的使用

    我们在开发的过程中,经常会遇到分页操作,本文主要介绍了Mybatis-Plus中分页插件PaginationInterceptor的使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 基于Spring框架由ConditionalOnMissingBean注解引发的问题

    基于Spring框架由ConditionalOnMissingBean注解引发的问题

    这篇文章主要介绍了基于Spring框架由ConditionalOnMissingBean注解引发的问题,具有很好
    2023-11-11
  • Java实现图像分割功能

    Java实现图像分割功能

    这篇文章主要为大家详细介绍了Java实现图像分割功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论