• 设计模式-UML类图


    1.什么是UML?

    UML本身是一套符号的规定,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等

    1.1 UML分类

    • 用例图
    • 静态结构图:类图(描述类和类之间的关系)、对象图、包图、组件图、部署图
    • 动态行为图:交互图(时序图与协作图)、状态图、活动图

    2.UML类图

    用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系

    2.1 依赖关系(Dependence)

    类中用到了对方,则两者就存在依赖关系

    public class PersonServiceBean {
        private PersonDao personDao;  // 成员属性
    
        public void save(Person person) {  // 参数
        }
    
        public IDCard getIDCard(Integer personid) {  // 返回类型
            IDCard idCard = new IDCard();
            return idCard;
        }
    
        public void modify() {
            Department department = new Department();  // 方法中使用到的
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    2.2 泛化关系(generalization)

    实际上就是继承关系,它是依赖关系的特例

    // DaoSupport.java
    public abstract class DaoSupport {
        public void save(Object entity) {
        }
    
        public void delete(Object id) {
        }
    }
    // PersonServiceBean.java
    public class PersonServiceBean extends DaoSupport{}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    2.3 实现关系(Implementation)

    实际上就是A类实现B接口,它是依赖关系的特例

    // PersonService.java
    public interface PersonService {
        public void delete(Integer id);
    }
    // PersonServiceBean.java
    public class PersonServiceBean implements PersonService{
        @Override
        public void delete(Integer id) {}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    2.4 关联关系(Association)

    实际上就是类与类之间的联系,它是依赖关系的特例。具有导航性(双向关系或单向关系)与多重性(如“1”表示有且仅有一个)

    // Person.java
    public class Person {
        private IDCard card;
    }
    // IDCard.java
    public class IDCard {
        private Person person;  // 如果存在就是双向关联关系
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    2.5 聚合关系(Aggregation)

    表示的是整体和部分的关系,整体与部分可以分开,它是关联关系的特例(具有关联的导航性与多重性)

    比如一台电脑由显示器和鼠标等组成,这些配件是可以从电脑上分离出来的(即可以不要),则使用带空心菱形的实线来表示:

    public class Computer {
        // 此时两个对象和Computer是可以分离的
        private Mouse mouse;
        private Monitor monitor;
        
        public void setMouse(Mouse mouse) {
            this.mouse = mouse;
        }
        
        public void setMonitor(Monitor monitor) {
            this.monitor = monitor;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    注意:如果在程序中Person实体中定义了对mouse进行级联删除,即删除Person时连同mouse一起删除,则mouse和Person就是组合关系

    2.6 组合关系(Composition)

    也是整体与部分的关系,但是整体与部分不可以分开

    public class Computer {
        // 此时两个对象和Computer是不可以分离的(Computer对象一创建这两个对象也就创建了)
        private Mouse mouse = new Mouse();
        private Monitor monitor = new Monitor();
    
        public void setMouse(Mouse mouse) {
            this.mouse = mouse;
        }
        public void setMonitor(Monitor monitor) {
            this.monitor = monitor;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述


    3.参考

    https://www.bilibili.com/video/BV1G4411c7N4?p=23-27

  • 相关阅读:
    Linux使用Docker部署DashDot访问本地服务器面板
    基于JavaMaven+MySQL的网上B2C商城系统前后台设计
    Java多线程(6):锁与AQS(下)
    Lua5.4源码剖析:二. 详解String数据结构及操作算法
    和为S的两个数字
    2.3_7生产者-消费者问题
    算法----小行星碰撞
    Python+Appium自动化搭建新手教程
    金仓数据库 KingbaseGIS 使用手册(4. 数据管理和查询)
    10.20作业
  • 原文地址:https://blog.csdn.net/qq_41398418/article/details/125454959