设计模式中的关系

news2024/11/26 8:30:23

文章目录

    • 一、依赖
      • 概念
    • 二,关联
      • 概念
    • 三、聚合
      • 概念
    • 四、组合
      • 概念
    • 五、实现
      • 概念
    • 六、继承
      • 概念
  • 图总结
  • 整体总结

一、依赖

概念

依赖是一种临时使用关系,代码层体现为作为参数。

具体体现:依赖者调用被依赖者的局部变量、参数、静态方法;

例子:人类(Human)的生存(live)依赖于食物(Food)

UML类图

代码实现

public class Human{
	public void live(Food food){
		food.eat();
	}
}
class Food{
	public void eat(){
        System.out.println("吃东西");
    }
}

二,关联

概念

关联是一个对象使用另一对象或与另一对象进行交互的关系。可以是双向,也可以是单向。

关联可视为一种特殊类型的依赖,即一个对象总是拥有访问与其交互的对象的权限,而简单的依赖关系并不会在对象间建立永久性的联系。

具体体现:关联的对象作为一个对象的成员变量

UML类图

在这里插入图片描述

代码实现

public class Human{
	private Food food;
	public void live(){
		food.eat();
	}
}
class Food{
	public void eat(){
		System.out.println("吃东西");
	}
}

三、聚合

概念

聚合是一种特殊的关联,表示整体对象拥有部分对象,整体和部分生命周期没有必然联系,聚合关系代码层体现也是通过成员变量来体现

聚合是一种特殊类型的关联,用于表示多个对象之间的“一对多”、“多对多”或“整体对部分”的关系。通常在聚合关系中,一个对象“拥有”一组其他对象,并扮演着容器或集合的角色。

UML类图:

在这里插入图片描述

具体体现:被聚合对象作为成员变量

例子:人体主要是由水、血液和肌肉聚合成的

代码实现:

public class Human{
	private Blood blood;
	private Water water;
	private Muscles muscles;
	public void body(Blood blood,Water water,Muscles muscles){
		this.blood=blood;
		this.water=water;
		this.muscles=muscles;
	}
}
class Blood{

}
class Water{

}
class Muscles{

}

四、组合

概念

比聚合更强的关联关系;组合是一种特殊类型的聚合,其中一个对象由一个或多个其他对象实例构成。组合与其他关系的区别在于组件仅能作为容器的一部分存在。

具体体现:个体对象作为成员变量

例子: 人和人的心脏、大脑

UML类图

在这里插入图片描述

代码实现

public class Human {
    private Brain brain;
    private Heart heart;
    private String status;

    public void sustainLife() {
        brain.control(status);
        heart.beat(status);
    }

    public Human(Brain brain, Heart heart, String status) {
        this.brain = brain;
        this.heart = heart;
        this.status = status;
    }
}

class Brain {
    public void control(String status) {
        if (status.equals("0")) {
            System.out.println("脑死亡");
        } else {
            System.out.println("大脑控制身体");
        }
    }
}

class Heart {
    public void beat(String status) {
        if (status.equals("0")) {
            System.out.println("心跳停止");
        } else {
            System.out.println("心脏跳动");
        }
    }
}

五、实现

概念

实现,定义一个合约,另一个实体履行合约,实现了一个接口。implements

例子: 引擎,有汽车的引擎,有卡车的引擎

UML类图

在这里插入图片描述

代码实现:

interface Functionality{
	
	void engines();
}

class Cars implements Functionality{

	@Override
	public void engines() {
		System.out.println("汽车的引擎");
	}
}

class Trucks implements Functionality{

	@Override
	public void engines() {
		System.out.println("卡车的引擎");	
	}
}

六、继承

概念

继承,子类和父类之间的关系,用于代码扩展,extends。

例子:动物类,包含猫和狗,动物类定义功能,猫狗也各自定义自己的功能

UML类图

代码实现:

abstract class Animal {
	abstract void functionality();
}
class Cat extends Animal {

	@Override
	void functionality() {
		System.out.println("猫的功能是上树");
	}
}

class Dog extends Animal {

	@Override
	void functionality() {
		System.out.println("狗的功能是力气大");
	}
}

图总结

在这里插入图片描述

  • 依赖:对类 B 进行修改会影响到类 A 。
  • 关联:对象 A 知道对象 B。类 A 依赖于类 B。
  • 聚合:对象 A 知道对象 B 且由 B 构成。类 A 依赖于类 B。
  • 组合:对象 A 知道对象 B、由 B 构成而且管理着 B 的生命周期。类 A 依赖于类 B。
  • 实现:类 A 定义的方法由接口 B 声明。对象 A 可被视为对象B。类 A 依赖于类 B。
  • 继承: 类 A 继承类 B 的接口和实现, 但是可以对其进行扩展。对象 A 可被视为对象 B。类 A 依赖于类 B。

整体总结

一、依赖是一种临时使用关系,代码层体现为作为参数。

二、关联是结构关系,表示两个对象相联系。代码层体现为作为成员变量使用,即属性。

三、聚合是一种特殊的关联,表示整体对象拥有部分对象,整体和部分生命周期没有必然联系,聚合关系代码层体现也是通过成员变量来体现

四、组合,整体和部分生命周期是一致的(实心菱形),也是通过类的成员变量来实现。

五、实现,定义一个合约,另一个实体履行合约,实现了一个接口。

六、继承,子类和父类之间的关系,用于代码扩展,extends。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/941027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

认识Mat容器

目录 1.什么是Mat类 2.Mat类能存储的数据 整数类型(有符号和无符号): 浮点数类型: 布尔类型: 3.Mat类的创建 1.利用矩阵宽、高和类型参数创建Mat类 2.利用矩陈Size(结构和数据类型参数创建Mat类 3.利用已有Mat…

c++ day6

1.编程题: 以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动…

RSA私钥解密操作

RSA私钥解密操作 一、背景二、操作三、常见问题3.1 invalid key format3.2 解密的数据太长3.3 Decryption error 一、背景 项目数据库中存放的敏感字段已使用rsa加密的方式,将内容加密成密文存放, 现在需要在使用的时候,使用私钥进行解密。 二、操作 …

无涯教程-Python机器学习 - AdaBoost函数

它是最成功的增强集成算法之一。该算法的主要关键在于它们对数据集中的赋予权重的方式。因此,在构建后续模型时,该算法无需过多关注。 在以下Python配方中,我们将通过使用Pima Indians糖尿病数据集上的 sklearn 的 AdaBoostClassifier 类来构建用于分类的Ada Boost集成模型。 …

【计算机基础】一文带你了解 Linux

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

【DevOps视频笔记】6 - 7. Jenkins 介绍 和 安装

一、Integrate 工具 二、Jenkins 介绍 1. Jenkins 最主要的工作 2. CI / CD 可以理解为: 2.1 CI 过程 2.2 CD 过程 三、Jenkins 安装 1. 安装准备工作 2. 安装 Jenkins Stage 1:拉取 jenkins 镜像 Stage 2:编写docker-compose.yml St…

Postgresql的一个bug_涉及归档和pg_wal

故障描述: 服务器ocmpgdbprod1,是流复制主节点,它的从节点是ocmpgdbprod2,两个节点的Postgresql数据库版本都是PostgreSQL 11.6,主节点ocmpgdbprod1配置了pg_wal归档,从节点ocmpgdbprod2没有配置pg_wal归档…

雅思作文复习

目录 我使用的词汇: 上升: 下降: 波动: 保持: 幅度 大变化: 小变化: 雅思评价标准改变 小作文一般花费20分钟,我觉得自己能在18分钟解决是最好 考生在雅思考试中的小作文&a…

kali的学习

网络配置 1.kali的网络设置 首先我们了解kali的网络设置 DHCP:动态主机配置协议 是一个局域网的协议 使用UDP 协议工作静态IP:用于大部分的中小型网络 通过网络管理员手动分配IP原理进程 /etc 系统大部分服务启动过程都要访问该目录 我们直接去看看…

高效便捷的法律咨询小程序的设计与实践

现如今,随着智能手机的普及和移动互联网的发展,小程序成为了一种新兴的应用形式。对于律师事务所来说,开发一款专属的法律咨询小程序,无疑可以为客户提供更加便捷和高效的服务。那么,对于初次接触小程序制作的新手来说…

spring:AOP面向切面编程+事务管理

目录 一、Aop( Aspect Oriented Programming) 二、springAOP实现 1.XML实现 2.注解实现 三、spring事务管理 一、Aop( Aspect Oriented Programming) 将程序中的非业务代码抽取,使非业务代码与业务代码相隔离,为目标类创建一个代理对象让代理对象调用…

【C++初阶】stack的常见操作和模拟实现

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

LNMT动静分离+keepalived

目录 前言 一、实验拓扑 二、配置tomcat 三、nfs配置 四、配置NGINX 五、配置NGINX的双机热备 六、验证双机热备 前言 LNMT动静分离是指在LNMT架构中使用动静分离技术,将动态请求和静态请求分开处理和分发,以提高性能和可扩展性。这种架构使用Nginx…

在GPU服务器(Linux)上安装Anaconda和PyTorch环境

安装Anaconda3 Anaconda官网&#xff1a;https://repo.anaconda.com/archive/ 根据自己需要&#xff0c;复制安装包名字&#xff0c;以Anaconda3-2023.07-2-Linux-x86_64.sh为例 命名规则&#xff1a;Anaconda3-<版本号>-Linux-x86_64.sh 在终端输入命令&#xff0c;下…

设备分类、设备号申请和注销

一、Linux内核对设备的分类 linux的文件种类&#xff1a; -&#xff1a;普通文件d&#xff1a;目录文件p&#xff1a;管道文件s&#xff1a;本地socket文件l&#xff1a;链接文件c&#xff1a;字符设备b&#xff1a;块设备 Linux内核按驱动程序实现模型框架的不同&#xff0…

JSX底层渲染机制

JSX底层渲染机制 一,.步骤 1.把我们写的jsx语法编译为虚拟DOM【virtualDOM】 虚拟DOM对象&#xff1a;框架自己内部构建的一套对象体系&#xff08;对象的相关成员都是React内部绑定的&#xff09;&#xff0c;基于这些属性描述出我们所构建视图中的DOM接的相关特征 1基于ba…

【crypto++使用】使用crypto++库函数运行RSA非对称加密

系列文章目录 1.&#xff08;全网最详细攻略&#xff09;【Crypto】在Visual studio2022中运行Cryptopp 文章目录 系列文章目录前言一、RSA加密过程、步骤可学习的网址 二、代码部分1.visual studio编程注意一个标准案例提供给大家 2.RSA密钥生成思考&#xff1a; 3.关于RSA的…

计算机视觉-卷积神经网络

目录 计算机视觉的发展历程 卷积神经网络 卷积&#xff08;Convolution&#xff09; 卷积计算 感受野&#xff08;Receptive Field&#xff09; 步幅&#xff08;stride&#xff09; 感受野&#xff08;Receptive Field&#xff09; 多输入通道、多输出通道和批量操作 …

死信队列理解与使用

一、简介 在rabbitMQ中常用的交换机有三种&#xff0c;直连交换机、广播交换机、主题交换机&#xff1b; 直连交换机中队列与交换机需要约定好routingKey去进行绑定&#xff1b; 广播交换机并不需要routingKey绑定,只需队列与交换机绑定即可&#xff1b; 主题交换机最大的特…

dml dql 约束 数据库设计

dml 1.添加数据 *语法 &#xff1a; *insert into 表名&#xff08;列名1&#xff0c;列名2&#xff0c;……..列名n&#xff09;values(值1&#xff0c;值2&#xff0c;…值n) *注意&#xff1a; 1.列名和值要一一对应 2.如果表名后&#xff0c;不写列名&#xff0c;就要给…