• 设计模式:UML类图


    基本介绍

    UML (Unified modeling language,统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。

    UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和它们之间的关系,比如类、接口之间的关系。

    画 UML 图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,类图是描述类与类之间的关系的,是 UML 图中最核心的部分,在学习设计模式的时候,我们有必要掌握类图的使用


    类与类之间的关系:依赖、泛化(继承)、实现、关联、聚合、组合

    各种关系的强弱顺序:泛化= 实现> 组合> 聚合> 关联> 依赖
    在这里插入图片描述


    一、依赖关系(Dependence)

    只要在方法局部变量、方法参数位置、方法返回值处使用了另外的类,他们就产生了依赖关系

    class Student {}
    class Teacher {}
    
    public class School {
        public School() {
            Teacher teacher;
            Student student;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在idea中,选中要显示关系的类,右键 Diagrams>Show Diagram,然后在打开界面右键选中 Show Dependencies 可以显示类的关系

    在idea中使用 灰色虚线箭头 表示依赖关系

    在这里插入图片描述


    二、泛化关系(Generalization)

    泛化关系又叫做继承关系,他是依赖关系的一种特例,只要是实现了继承关系的类,都属于泛化关系

    class Son extends Father {}
    
    public class Father {}
    
    • 1
    • 2
    • 3

    在 idea 中用 深蓝色实线实心箭头 表示泛化关系

    在这里插入图片描述


    三、实现关系(Realization)

    实际上就是 A 类实现 B 接口,他也是依赖关系的一种特例

    class UserServiceImpl implements UserService {  }
    
    public interface UserService {}
    
    • 1
    • 2
    • 3

    在 idea 中使用 绿色虚线实心箭头 表示实现关系

    在这里插入图片描述


    四、关联关系(Association)

    • 实际上就是类与类之间的联系,他也是依赖关系的一种特例
    • 关联关系具有导航行,即:单向关系或双向关系,关联关系还具有多重性
    • 如:“1”(表示有且仅有1个)、“0…”(表示0个或者多个)、“0,1”(表示0个或者1个)、“n…m”(表示n个到m个)、“m…”(表示至少m个)、“*”(表示多个)

    如下表示 最多一个

    // Emp.java
    public class Emp {}
    
    // Dep.java
    public class Dep {
        private List<Emp> emps;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述


    五、聚合关系(Aggregation)

    表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。

    聚合关系最典型的一个实例就是电脑与鼠标、键盘的关系,电脑离开了鼠标和键盘还是可以正常工作,他们并没有连在一起,可以通过USB接口插拔。

    class Mouse {}
    class Keyboard {}
    
    public class Computer {
        private Mouse mouse;
        private Keyboard keyboard;
    
        public void setMouse(Mouse mouse) {
            this.mouse = mouse;
        }
    
        public void setKeyboard(Keyboard keyboard) {
            this.keyboard = keyboard;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    灰色普通箭头+灰色实心菱形

    在这里插入图片描述


    六、组合关系(Composition)

    表示的是整体和部分的关系,整体与部分不可以分开。组合关系是关联关系的特例,所以他具有关联的导航性与多重性。

    组合关系最典型的一个实例就是人体的构成,当一个正常的婴儿诞生的时候,他必然有手脚、头、身体,缺一不可,整体与局部不可分开。

    class Head {}
    class Body {}
    class Hand {}
    class Leg {}
    
    public class Person {
        private Head head = new Head();
        private Body body = new Body();
        private Hand hand = new Hand();
        private Leg leg = new Leg();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    灰色普通箭头+灰色实心菱形

    在这里插入图片描述


    总结

    1、依赖关系:由使用者指向被使用者。

    在这里插入图片描述
    如果A指向B,则说明A中使用了B,使用方式包括A类中有B类实例化对象的局部变量。A类中有方法把B类实例化对象当做了参数,A类中有方法调用了B类中的静态方法。


    2、泛化关系:由子类指向父类

    在这里插入图片描述


    3、实现关系:由实现类指向接口

    在这里插入图片描述


    4、关联关系:由拥有者指向被拥有者。

    在这里插入图片描述
    如果A指向B,则说明A类中有B类的成员变量


    5、聚合关系:由整体指向部分

    在这里插入图片描述

    如果A指向B,则说明A类中有B类的成员变量,但是与关联关系不同,A类和B类有逻辑关系。A类是整体,B类是部分。A类由B类构成,同时B类即便不在A类中也可以单独存在。


    6、组合关系:由整体指向部分。

    在这里插入图片描述

    如果A指向B,则说明A类中有B类的成员变量,但是与关联关系不同,A类和B类有逻辑关系。A类是整体,B类是部分。A类由B类构成。但与聚合关系不同,如果B类不在A类中就无法单独存在。

  • 相关阅读:
    网络安全(黑客)自学
    深度剖析Linux信号机制
    【python】正则表达式 re模块!
    java计算机毕业设计Web好好吃查询系统源码+mysql数据库+系统+lw文档+部署
    数据库事务
    MySQL的缓冲池(buffer pool)及 LRU算法
    附加进程 到远程服务器中Docker容器内 调试
    外汇天眼:亏亏亏,为什么亏损的总是我?大数据分析报告告诉你答案
    Maven环境搭建
    【每日一题Day345】LC2562找出数组的串联值 | 模拟
  • 原文地址:https://blog.csdn.net/apple_53947466/article/details/125519939