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

设计模式中的类关系

1. 依赖(Dependency)

定义:一个类使用到另一个类的实例,通常是通过方法参数、局部变量等。依赖关系是最弱的关系,因为它仅仅表示类之间的临时关联。

特征:在 UML 图中,依赖关系用带箭头的虚线表示,箭头指向被依赖的类。

示例

public class Driver {public void drive(Car car) {car.start();}
}
​
public class Car {public void start() {System.out.println("Car started");}
}

在这个例子中,Driver 类依赖于 Car 类,因为 drive 方法使用了 Car 类的对象。

2. 关联(Association)

定义:关联是一种结构关系,描述了一个对象知道另一个对象的存在,并且可以和它进行交互。一个类中存在另一个类的对象作为成员变量,这种关系可以是双向的。关联通常是长期的,是类之间的一种静态关系。

特征:在 UML 图中,关联关系用带箭头或没有箭头的实线表示,箭头指向目标类。关联可以是双向的(双箭头)或单向的(单箭头)。

示例

public class Person {private Address address;
​public Person(Address address) {this.address = address;}
​public Address getAddress() {return address;}
}
​
public class Address {private String street;
​public Address(String street) {this.street = street;}
​public String getStreet() {return street;}
}

在这个例子中,Person 类和 Address 类之间是关联关系,Person 类持有 Address 类的引用。

3. 聚合(Aggregation)

定义:聚合是一种特殊的关联关系,它表示整体和部分之间的关系。聚合是“拥有”关系,但部分可以独立于整体存在。

特征:在 UML 图中,聚合用带有空心菱形的实线表示,菱形指向整体的一方。

示例

public class Department {private List<Employee> employees;
​public Department() {this.employees = new ArrayList<>();}
​public void addEmployee(Employee employee) {employees.add(employee);}
}
​
public class Employee {private String name;
​public Employee(String name) {this.name = name;}
}

在这里,DepartmentEmployee 是聚合关系。Department 作为整体,包含了 Employee 作为部分。Employee 可以脱离 Department 单独存在。

4. 组合(Composition)

定义:组合是一种更强的聚合关系,它也描述整体和部分的关系,但部分不能独立于整体存在。当整体销毁时,部分也会被销毁。

特征:在 UML 图中,组合用带有实心菱形的实线表示,菱形指向整体的一方。

示例

public class House {private List<Room> rooms;
​public House() {rooms = new ArrayList<>();rooms.add(new Room("Living Room"));rooms.add(new Room("Bedroom"));}
}
​
public class Room {private String name;
​public Room(String name) {this.name = name;}
}

在这个例子中,HouseRoom 是组合关系。Room 作为 House 的一部分,不能脱离 House 独立存在。

5. 实现(Implementation)

定义:实现是指一个类实现了一个接口,它必须提供接口中定义的所有方法的具体实现。

特征:在 UML 图中,实现关系用带空心箭头的虚线表示,箭头指向接口。

示例

public interface Animal {void makeSound();
}
​
public class Dog implements Animal {public void makeSound() {System.out.println("Bark");}
}

在这个例子中,Dog 实现了 Animal 接口,这是实现关系。

6. 继承(Inheritance)

定义:继承是类与类之间的一种关系,表示一个类是另一个类的子类,它继承了父类的属性和方法。

特征:在 UML 图中,继承用带空心箭头的实线表示,箭头指向父类。

示例

public class Animal {public void eat() {System.out.println("Animal is eating");}
}
​
public class Cat extends Animal {public void meow() {System.out.println("Meow");}
}

在这个例子中,Cat 类继承了 Animal 类,这是一种继承关系。

总结

以上代码示例展示了设计模式中的六大关系的基本形式和应用场景。这些关系帮助我们理解和设计类与类之间的连接方式,以实现良好的代码结构和模块化。理解这些关系对于掌握面向对象设计和设计模式有着重要意义。

推荐阅读

设计模式中的类关系-CSDN博客

面向对象设计原则-CSDN博客

Java之23种设计模式介绍-CSDN博客

Java之23种设计模式代码示例_java好用的设计模板编程-CSDN博客

http://www.lryc.cn/news/418870.html

相关文章:

  • glibc的安装及MySQL的安全用户角色权限(twenty-one day)
  • AttributeError: ‘ChatGLMTokenizer‘ object has no attribute ‘sp_tokenizer‘. 已解决
  • 徐州BGP机房与普通机房的区别有哪些?
  • VBA 程序运行中禁用鼠标键盘
  • CUDA编程从零到壹
  • 【国产开源可视化引擎】Meta2d.js API-Utils
  • 大模型与数据分析的融合:创新与发展的新机遇
  • 基于融合正余弦和柯西变异的麻雀搜索算法SCSSA优化CNN-BiLSTM的多变量时间序列预测
  • c++基本数据类型变量的最大值,最小值和内存空间
  • 005集——运算符和循环——C#学习笔记
  • 【Tessent IJATG Users Manual】【Ch5】IJTAG Network Insertion
  • 我在高职教STM32——I2C通信入门(2)
  • GPT解逻辑数学题之8个8变1000的故事
  • 10、MySQL-索引
  • 【python】Python操作Redis数据库的详细教程与应用实战
  • 【数据结构的——红黑树】
  • 第十二章:设置pod和容器权限-保障集群内节点和⽹络安全
  • 灵途科技再度入选2024年度“光谷瞪羚”企业名单!
  • Centos7.6配置阿里云镜像源
  • 梨子的功效与作用 梨子生吃熟吃功效竟大不同
  • 北斗三号5G遥测终端机系统在水库大坝安全监测应用
  • 代码随想录算法训练营第五十一天|99.岛屿数量 深搜 、99.岛屿数量 广搜、岛屿的最大面积
  • 【c++刷题笔记-图论】day62:Floyd 算法、A * 算法精讲
  • FPGA知识基础之--clocking wizard ip核的使用以及modelsim与vivado联合仿真
  • Java中的分布式日志与追踪
  • 案例精选 | 某省级妇幼保健院自动化安全运营中心建设成功实践
  • 数字化时代:传统行业的转型之路在何方?
  • 【STM32系统】基于STM32设计的按键PWM控制舵机窗帘柜子门禁家居等控制系统——文末资料下载
  • 【生成式人工智能-八-大型语言模型的能力评估】
  • Qt ts文件详解