【Java设计模式】UML类图六大关系总结(含代码)

244 阅读3分钟
  • 本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

今天学习了Java设计模式中的类图设计,它是学习后面课程中各种设计模式的前提,所以就整理了笔记,其中类图是自己截图过来的,感觉还可以,大家喜欢的话,三连支持一下💕🧡

一、UML基本介绍

  • UML是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果
  • Class表示类
  • Interface表示接口
  • Dependency表示依赖
  • Association表示关联
  • Generalization表示泛化(继承)
  • Realization表示实现
  • Aggregation表示聚合
  • Composite表示组合

二、UML图

UML图分为静态结构图和动态行为图,其中类图是描述类与类之间的关系,是UML图中最核心的部分,所以主要学习和介绍类图。

三、UML类图

  • 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系
  • 类之间的关系:依赖、泛化(继承)、实现、关联、聚合、组合

四、类图分类

依赖关系(Dependency)

概念

只要是在类中用到了对方,他们之间就存在依赖关系;如果没有对方,连编译都通过不了。

代码

public class PersonServiceBean {
    private PersonDao personDao;
    public void save(Person person) {
    }
    public IDCard getIDCard(Integer personid) {
        return null;
    }
    public void modify() {
        Department department = new Department();
    }
}
public class Person{}
public class PersonDao{}
public class IDCard{}
public class Department{}

对应的类图

在这里插入图片描述

小结

类中用到了对方,可以是类的成员属性、方法的返回类型、方法接收的参数类型

泛化关系(Generalization)

概念

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

代码

public abstract class DaoSupport{
    public void save(Object entity){
    }
    public void delete(Object id){
    }
}
public class PersonServiceBean extends DaoSupport{}

对应的类图

在这里插入图片描述

小结

泛化关系实际上就是继承关系;如果A类继承了B类,就说A 和 B存在泛化关系

实现关系(Implementation)

概念

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

代码

public interface PersonService {
    void delete(Integer id);
}
public class PersonServiceBean implements PersonService {
    @Override
    public void delete(Integer id) {
        System.out.println("delete..");
    }
}

对应的类图

在这里插入图片描述

小结

实现关系实际上就是实现接口;如果A类实现了B接口,就说A 和 B存在实现关系

关联关系(Association)

概念

关联关系实际上就是类与类之间的联系,是依赖关系的特例

单向一对一关系

代码

public class Person {
    private IDCard idCard;
}
public class IDCard{}

对应的类图

在这里插入图片描述

双向一对一关系

代码

public class Person {
    private IDCard idCard;
}
public class IDCard{
    private Person person;
}

对应的类图

在这里插入图片描述

小结

关联关系就比较容易,强调的是类与类之间的联系,符号用直线表示

聚合关系(Aggregation)

概念

聚合关系表示的是整体和部分的关系,整体与部分可以分开

代码

假设一台电脑由键盘,显示器,鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的。

public class Computer {
    private Mouse mouse; //鼠标可以和computer分离
    private Monitor monitor;//显示器可以和Computer分离
    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }
    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
}
public class Mouse{}
public class Monitor{}

对应的类图

在这里插入图片描述

小结

聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。

组合关系(Composition)

概念

组合关系是整体与部分的关系,但是整体与部分不可以分开。

代码

根据现实,一个人不能没有脑袋,但是可以没有身份证(可以补办)

public class Person {
    private Head head = new Head();
    private IDCard idCard;
}
public class IDCard{}
public class Head{}

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

对应的类图

在这里插入图片描述

小结

如果把private IDCard idCard;改为 private IDCard idCard = new IDCard();表示IDCard与Person不可分开,是组合关系。

总结

类图不难,整理一下大纲: 在这里插入图片描述