Composition in Java

2025年3月27日 | 阅读 3 分钟

组合是一种设计或实现“has-a”关系的方式。组合和继承都是设计技术。继承用于实现“is-a”关系。“has-a”关系用于确保我们程序中的代码可重用性。在组合中,我们使用一个引用另一个对象的实例变量。

两个对象的组合关系当一个对象包含另一个对象时才可能发生,并且该对象完全依赖于它。被包含的对象在没有父对象存在的情况下不应该存在。简单来说,我们可以说这是一种通过引用来描述两个或多个类之间关系的技术。为此,我们使用实例变量,该变量应在首次使用之前创建。

Composition in Java

关键点

  • 组合代表了一种“部分-整体”的关系。
  • 在这两种实体在组合中相互关联。
  • 当一个对象包含一个组合对象,并且该组合对象在没有另一个实体的情况下无法存在时,这两个实体之间的组合就完成了。例如,如果一所大学拥有若干学院列表,那么一所大学是一个整体,而学院列表是该大学的一部分。
  • 倾向于组合而非继承。
  • 如果一所大学被删除,那么该大学的所有相应学院都应该被删除。

让我们以大学及其学院为例来理解组合的概念。

我们创建一个名为College的类,其中包含变量,即名称和地址。我们还创建一个名为University的类,该类具有引用来引用学院列表。一所大学可以有多个学院。因此,如果一所大学永久关闭,那么该大学内的所有学院也将关闭,因为学院在没有大学的情况下无法存在。大学和学院之间的关系是组合。

CompositionExample.java

输出

Composition in Java

使用组合的好处

  • 组合允许我们重用代码。
  • 在 Java 中,我们可以通过组合概念使用多重继承。
  • 组合提供了更好的类的可测试性。
  • 组合允许我们轻松地用更好、更改进的版本替换组合类的实现。
  • 组合允许我们在运行时通过更改成员对象来动态更改程序的行为。