• 【Java 设计模式】UML 之类图


    前言:什么是 UML ?

    • 定义:UML 即 Unified Modeling Language 统一建模语言,是用来设计软件的可视化建模语言。
    • 特点:简单、统一、图形化、可以表达软件设计中的动态与静态信息。
    • 分类:用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图 9 种。

    §1 类图概念

    • 定义:类图是面向对象建模的主要组成部分,显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等,但不显示暂时性的信息。
    • 作用:系统分析和设计阶段的重要产物,系统编码和测试的重要模型。

    §2 类的表示方式

    在这里插入图片描述

    • 可见性符号
      + :表示 public
      - :表示 private

      # :表示 protected
      什么都不写 表示 default

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

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

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

    public class Employee {
        private String name;
        private int age;
        private String address;
        public void work(){
            // doSomething
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    §3.1 关联关系

    • 关联关系是对象之间的一种引用关系,用于表示一个类对象对另一个类对象之间的联系。
    • 关联关系也是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系
    • 关联又分为单向关联、双向关联和自关联

    §3.1.1 单向关联

    在这里插入图片描述

    • 单向关联使用带箭头的实直线表示,箭头指向被引用的对象。
    public class Address {
    }
    
    public class Customer {
        private Address address;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    §3.1.2 双向关联

    在这里插入图片描述

    • 双向关联使用不带箭头的实直线表示,因为双方各自都持有对方类型的成员变量,所以不用使用箭头刻意的表示谁引用了谁。
    public class Product {
        private Customer customer;
    }
    
    public class Customer {
        private List<Product> products;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    §3.1.3 自关联

    在这里插入图片描述

    • 自关联使用一个带箭头且指向自己的实直线表示,自己包含自己。
    public class Node {
        private Node subNode;
    }
    
    • 1
    • 2
    • 3

    §3.2 聚合关系

    在这里插入图片描述

    • 聚合关系其实是关联关系的一种,是强关联关系,是整体和部分之间的关系。
    • 聚合关系通过成员对象来实现,其中成员对象是整体对象的一部分,但成员对象可以脱离整体对象而独立存在。如:大学(整体)里有很多老师(部分),这些老师属于这个大学,但他们又可以脱离学校单独存在。
    • 聚合关系使用带空心菱形的实直线来表示,菱形指向整体

    §3.3 组合关系

    在这里插入图片描述

    • 组合关系是一种更强烈的聚合关系,同样表示的是类之间整体和部分的关系,但相较于聚合关系,组合关系中的整体对象可以控制部分对象的生命周期,一旦整体对象不存在了,部分对象也将不复存在。如:头(整体)和嘴(部分)的关系,头没了,嘴自然也不在了。
    • 组合关系使用带实心菱形的实直线表示,菱形指向整体
    public class Head {
        private Mouth mouth;
    }
    
    public class Mouth {
        public void eat() {
            // doSomething
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    §3.4 依赖关系

    在这里插入图片描述

    • 依赖关系是一种使用关系,是对象之间耦合性最弱的一种关联方式,是临时性的关联。使用场景主要为某个类的方法通过局部变量、方法的参数来访问另一个类(被依赖类)中的某些方法。
    • 依赖关系使用带箭头的虚直线表示,箭头指向被依赖类
    public class Car {
        public void move() {
            // doSomething
        }
    }
    
    public class Driver {
        private String name;
        public void drive(Car car) {
            car.move();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    §3.5 继承关系

    在这里插入图片描述

    • 继承关系是对象之间耦合性最大的一种关系,表示一般与特殊的关系,是父子类之间的一种继承关系。
    • 继承关系又可称为泛化关系,使用带空心三角箭头的实直线表示,箭头从子类指向父类
    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
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    §3.6 实现关系

    在这里插入图片描述

    • 实现关系是接口与实现类之间的关系。
    • 实现关系使用带空心三角箭头的虚线表示,箭头从实现类指向接口,箭头也是虚线。
    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
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    Tomcat 设置JVM内存大小
    2020年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
    react文件预览插件react-file-viewer
    Kafka集群搭建与实操笔记(伪分布式)
    python调用C语言库
    MetaMask-RPC API
    牛客练习赛100 A.小红的小桃子(exgcd)
    单调栈(力扣496、LCR03、503)
    k8s创建tomcat容器deployment的yaml
    Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业
  • 原文地址:https://blog.csdn.net/Coder_Farmer/article/details/127914022