设计模式:UML类图

基本介绍

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

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

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


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

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


一、依赖关系(Dependence)

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

class Student {}
class Teacher {}

public class School {
    public School() {
        Teacher teacher;
        Student student;
    }
}

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

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

在这里插入图片描述


二、泛化关系(Generalization)

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

class Son extends Father {}

public class Father {}

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

在这里插入图片描述


三、实现关系(Realization)

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

class UserServiceImpl implements UserService {  }

public interface UserService {}

在 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;
}

在这里插入图片描述


五、聚合关系(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;
    }
}

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

在这里插入图片描述


六、组合关系(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、依赖关系:由使用者指向被使用者。

在这里插入图片描述
如果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类中就无法单独存在。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laptoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值