【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
    }
}

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

§3.1 关联关系

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

§3.1.1 单向关联

在这里插入图片描述

  • 单向关联使用带箭头的实直线表示,箭头指向被引用的对象。
public class Address {
}

public class Customer {
    private Address address;
}

§3.1.2 双向关联

在这里插入图片描述

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

public class Customer {
    private List<Product> products;
}

§3.1.3 自关联

在这里插入图片描述

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

§3.2 聚合关系

在这里插入图片描述

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

§3.3 组合关系

在这里插入图片描述

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

public class Mouth {
    public void eat() {
        // doSomething
    }
}

§3.4 依赖关系

在这里插入图片描述

  • 依赖关系是一种使用关系,是对象之间耦合性最弱的一种关联方式,是临时性的关联。使用场景主要为某个类的方法通过局部变量、方法的参数来访问另一个类(被依赖类)中的某些方法。
  • 依赖关系使用带箭头的虚直线表示,箭头指向被依赖类
public class Car {
    public void move() {
        // doSomething
    }
}

public class Driver {
    private String name;
    public void drive(Car car) {
        car.move();
    }
}

§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
    }
}

§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
    }
}
  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,根据提供的引用内容中没有包含java享元模式的UML图。但是可以为您简要介绍java享元模式的UML图。 享元模式的UML图如下所示: - Flyweight:享元接口,定义了享元对象的公共方法。 - ConcreteFlyweight:具体享元对象,实现了享元接口,并存储了内部状态。 - UnsharedConcreteFlyweight:非共享具体享元对象,不共享的对象,一般不会出现在享元工厂中。 - FlyweightFactory:享元工厂类,负责创建和管理享元对象。 - Client:客户端类,通过享元工厂获取享元对象,并操作具体享元对象。 请注意,由于无法直接提供UML图,以上是一份简化的描述。在实际应用中,可能还会有其他的类和关系。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Java设计模式之享元模式(UML类图分析+代码详解)](https://blog.csdn.net/m0_51750419/article/details/127332662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [设计模式-享元模式](https://blog.csdn.net/qq_44065088/article/details/108725714)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

准Java全栈开发工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值