【一】【设计模式】类关系UML图

1. 继承(Generalization)

继承是对象间的一种层次关系,允许子类继承并扩展父类的功能。

UML线:带有空心箭头的直线,箭头指向基类(父类)。

 
class Parent {public void parentMethod() {System.out.println("This is a method in the parent class.");}
}class Child extends Parent {public void childMethod() {System.out.println("This is a method in the child class.");}
}

在这个例子中,Child类继承了Parent类,拥有Parent类的方法以及自己的方法。

2. 实现(Implementation)

实现关系指的是类实现接口中声明的方法。

UML线:带有空心箭头的虚线,箭头指向接口。

 
interface Animal {public void eat();
}class Dog implements Animal {public void eat() {System.out.println("Dog is eating.");}
}

Dog类实现了Animal接口,提供了eat方法的实现。

3. 关联(Association)

关联表示不同类的对象之间的连接。它可以是双向的,也可以是单向的。不是其他的关系,并且两个类有联系,就是关联关系。

UML线:普通的直线,两端可能有箭头,表示关系的方向。箭头或无箭头取决于关系的双向性或单向性。通常会在线旁边标注角色名和/或多重性(比如1..*表示一个到多个)。

双向关联

 
public class Customer{private product[] prodects;}
public class Product{private Customer customer;}

单向关联

 
public class Customer{private Address address;}
public class Address{}

自关联

 
public class Node{private Node subNode;}

多重关联

 
public class Form{private Button[] buttons;}public class Button{}

一个按钮,与1到1和界面有关。一个界面,与0到多个按钮有关。

4. 聚合(Aggregation)

聚合是一种特殊的关联关系,表示“整体-部分”关系,但部分可以脱离整体单独存在。聚合关系通常使用成员变量来实现,且成员变量的生命周期不由容器对象管理。

UML线:带有空心菱形的直线,菱形在整体的一端,箭头指向部分的一端。

 
public class Car {private Engine engine;public Car(Engine engine){this.engine=engine;}public void setEngine(Engine engine){this.engine=engine;}
}public class Engine  {}

5. 组合(Composition)

组合也是一种“整体-部分”关系,但与聚合不同的是,部分不能脱离整体存在。在组合关系中,部分的生命周期由整体管理。

UML线:带有实心菱形的直线,菱形在整体的一端,箭头指向部分的一端。

 
public class Head{private Mouth mouth;public Head(){mouth=new Mouth();}
}
public class Mouth{}

6. 依赖(Dependency)

依赖表示一个类的实现依赖于另一个类的定义。一个类的实现需要另一个类的协助。

UML线:带有箭头的虚线,箭头指向被使用者,被依赖者。

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

Driver需要使用Car类方法,Driver依赖于Car,Car被Driver所依赖。Car被依赖,Driver是依赖方。

结尾

最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。

同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。

谢谢您的支持,期待与您在下一篇文章中再次相遇!

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

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

相关文章

AIOps 智能运维:有没有比专家经验更优雅的错/慢调用分析工具?

作者:图杨 工程师小 A 刚刚接手他们公司最核心的电商系统的运维工作,小 A 发现,在生产环境中,系统明明运行得非常稳定,但是总会出现一些“诡异”的情况。比如: 偶尔会一些错误调用,但是&#…

浅谈如何自我实现一个消息队列服务器(1)——需求分析

文章目录 一、什么是消息队列?二、当下主流的消息队列(MQ)三、自我实现一个消息队列服务器的前期准备——需求分析3.1 核心概念3.2 broker server 核心概念3.2.1、虚拟主机(Virtual Host)3.2.2、交换机(Exchange)3.2.2…

shopee店铺降权了怎么办?shopee店铺降权恢复步骤

当您发现自己的Shopee店铺被降权时,这意味着您的产品在搜索结果中的排名下降,从而可能导致流量和销售额的减少。面对这种情况,您需要采取一系列措施来恢复或提升店铺的权重。以下是一些具体的步骤和拓展的原因分析:一:…

3、设计模式之工厂模式2(Factory)

一、什么是工厂模式 工厂模式属于创建型设计模式,它用于解耦对象的创建和使用。通常情况下,我们创建对象时需要使用new操作符,但是使用new操作符创建对象会使代码具有耦合性。工厂模式通过提供一个公共的接口,使得我们可以在不暴露…

【深度学习笔记】7_7 AdaDelta算法

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 7.7 AdaDelta算法 除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的…

嵌入式驱动学习第三周——linux内核链表

前言 在 Linux 内核中使用最多的数据结构就是链表了,其中就包含了许多高级思想。 比如面向对象、类似C模板的实现、堆和栈的实现。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博…

C#无法给PLC写入数据原因分析

一、背景 1.1 概述 C#中无法给PLC写入数据的原因有很多,这里分享网络端口号被占用导致无法写入的确认方法 1.2 环境 ①使用三菱PLC ②C#通过网口与PLC进行通讯 二、现象 1.1 代码 通过HslCommunication连接PLC时,连接返回成功,写入返回失败 …

snakeflow的springboot项目

Gitee搜索“liuxz/snakerflow”,它是spring boot集成了一款国产工作流引擎snakerflow。 下面是安装步骤: 创建数据库snaker-web,字符集设置成utf8mb4和utf8mb4_generic。不然的话,中文插入不进去。 运行sql命令 CREATE TABLE …

Kotlin:泛型

点击查看泛型中文文档 点击查看泛型英文文档 简介 与 Java 类似&#xff0c;Kotlin 中的类也可以有类型参数&#xff1a; class Box<T>(t: T) {var value t }一般来说&#xff0c;要创建这样类的实例&#xff0c;我们需要提供类型参数&#xff1a; val box: Box<…

调试安卓 gles性能瓶颈

目录 下载Arm Performance Studio编译Unity Shader运行malios调试用处和限制 原文请见&#xff1a;参考地址 使用mali offline shader compiler分析shader的性能瓶颈。 下载Arm Performance Studio 下载地址 编译Unity Shader 通常选择GLES3x。 You might need to select G…

智能控制:物联网智能插座对接文档

介绍 一开始买的某米的插座&#xff0c;但是好像接口不开放&#xff0c;所以找到了这个插座&#xff0c;然后自己开发了下&#xff0c;用接口控制插座开关。wifi的连接方式&#xff0c;通电后一般几秒后就会连接上wifi&#xff0c;这个时候通过接口发送命令给他。 产品图片 通…

idea配置自定义注释模版和其他模板

项目场景&#xff1a; idea配置自定义模版 自定义注释模版其他模板&#xff0c;包括syso快捷键&#xff0c;swith快捷键等 自定义注释模版 1、File and Code Templates 第一种类创建完后头部自动生成注释模板 打开idea&#xff0c;选择 Settings--> Editor--> File a…

nvm安装不同版本的node

在项目开发过程中&#xff0c;不同项目依赖的node版本不同&#xff0c;但频繁的卸载和安装很麻烦&#xff0c;这篇文章介绍nvm安装过程 1.nvm安装 这个网上随便找一篇跟着安装即可 nvm安装教程 2.nvm安装不同版本的node 网上普遍的方式是&#xff1a; 找到nvm安装目录下的s…

浅谈LockBit勒索病毒

在数字时代&#xff0c;随着科技的飞速发展&#xff0c;网络安全问题愈发凸显。恶意软件和勒索软件等网络威胁正不断演变&#xff0c;其中一款备受关注的勒索软件就是LockBit。 LockBit是一种高度复杂且具有破坏性的勒索软件。与传统的勒索软件相比&#xff0c;LockBit在其攻击…

NVMFS5A160PLZT1G汽车级功率MOSFET P沟道60 V 15A 满足AEC-Q101标准

关于汽车电子AEC Q101车规认证&#xff1f; 是一种针对分立半导体的可靠性测试认证程序&#xff0c;由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等…

新建项目module,但想归到一个目录下面

1. 想建几个module, 例如 component-base-service,component-config-service, 但是module多了会在CloudAction下面显示很多目录, 所以想把它们归到components模块下面去, 类似于下图的效果 2. 创建过程 右击CloudAction 新建 module -> 选maven类型 输入components, 建成后删…

Capture One 23:光影魔术师,细节掌控者mac/win版

Capture One 23&#xff0c;不仅仅是一款摄影后期处理软件&#xff0c;它更是摄影师们的得力助手和创意伙伴。这款软件凭借其卓越的性能、丰富的功能和前沿的技术&#xff0c;为摄影师们带来了前所未有的影像处理体验。 Capture One 23 软件获取 Capture One 23以其强大的色彩…

【C语言】Infiniband驱动mlx4_load_one函数

一、中文注释 以下是针对mlx4_load_one函数的主要代码路径的中文注释。该函数是用于加载并初始化Mellanox网络设备的驱动函数。通过注释&#xff0c;可以了解函数在初始化过程中执行的关键步骤。 /* mlx4_load_one函数&#xff1a;用于加载并初始化PCI设备&#xff08;例如网…

效果图代渲多少钱一张?带你详细了解它的计费规则!

不知道有没有朋友遇到过渲着渲着就崩溃的情况发生&#xff0c;不然也不会去找代渲染的平台/某宝等渠道 也就是为了图能够顺利的跑出来&#xff0c;做了后期处理后&#xff0c;及时交付给客户。 我们以渲染100云渲染来举例&#xff0c;它成立2015年&#xff0c;是一家效果图代…