当前位置: 首页 > news >正文

【一】【设计模式】类关系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.lryc.cn/news/316871.html

相关文章:

  • 【DevOps基础篇】容器化架构基础设施监控方案
  • 【QT】文件流操作(QTextStream/QDataStream)
  • CentOS 7 devtoolset编译addressSanitizer版本失败的问题解决
  • ubuntu2004桌面系统英伟达显卡驱动安装方法
  • Java通过Excel批量上传数据!!!
  • 【PyQT/Pysider】控件背景渐变
  • ChatGPT-4 VS 文心一言4.0
  • MYSQL------从概述到DQL
  • MATLAB算法实战应用案例精讲-【图像处理】图像识别(基础篇)(二)
  • Leetcode 3.12
  • 【天池课堂】零基础入门数据挖掘-课程汇总
  • 表单进阶(3)-上传文件和隐藏字段
  • LLM(大语言模型)常用评测指标-MAP@R
  • 腾讯面经学习笔记
  • 北京某中厂凉经
  • 离线数仓(五)【数据仓库建模】
  • python | 类与对象
  • 基于Qt 和python 的自动升级功能
  • 【论文阅读】IEEE Access 2019 BadNets:评估深度神经网络的后门攻击
  • Unity 让角色动起来(动画控制器)
  • ubuntu22.04环境中安装pylint
  • 主流数据库的区别
  • veeam备份基础
  • Flink并行度
  • 这届留学生是懂作弊的,ChatGPT震惊教授一整年!
  • CVE-2023-38836 BoidCMSv.2.0.0 后台文件上传漏洞
  • pf4j插件实践验证
  • 计算机组成原理之运算方法和运算器
  • Redux Toolkit
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码)