Java 代码中的聚合和组合
Posted
技术标签:
【中文标题】Java 代码中的聚合和组合【英文标题】:Aggregation and Composition in Java Code 【发布时间】:2013-12-16 17:36:39 【问题描述】:由于聚合和组合是相关的关联,或者我们可以说它给出了对对象或其他任何事物之间关系的理解。
我发布这个问题是因为我在面试中问了一个问题,即组合和聚合是什么。
所以根据我的理解,我给出的想法如下。
http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition
Aggregation, Association and Composition
Association vs. Aggregation vs. Composition in Java
并且还访问了更多。
我的基本解释是,Aggregation 表示松散的关系,而 Composition 表示强烈的关系,并且对此进行了明确的解释。
但是面试官侮辱了我并说这是一个理论概念,你说我想要完美的 Java 代码,它们有什么不同,还告诉我如果我会给你一个小应用程序,那么你将如何识别它这是聚合,这是组合?
所以现在我想了解纯技术概念和 Java 代码,它们有何不同以及它们是什么?
【问题讨论】:
Check this 以及 【参考方案1】:考虑一个LinkedList
类的简单示例。 LinkedList
由 Nodes
组成。这里LinkedList
类是拥有对象。当它被销毁时,其中包含的所有Nodes
都将被抹去。如果 Node
对象从列表中删除,LinkedList
对象仍将存在。
组合的实现使得一个对象包含另一个对象。
class LinkedList
Node head;
int size;
这是作曲。
另一个例子,考虑一个Circle
类,它有一个Point
类,用于定义其中心的坐标。如果Circle
被删除,它的中心也会随之被删除。
class Circle
private float radius;
private Point center;
public Circle(Point center, float radius)
this.center = center;
this.radius = radius;
public void setRadius(float radius)
this.radius = radius;
public void setCenter(Point center)
this.center = center;
public float getRadius()
return radius;
public Point getCenter()
return center;
class Point
private int x;
private int y;
public Point(int x, int y)
this.x = x;
this.y = y;
public void setY(int y)
this.y = y;
public void setX(int x)
this.x = x;
public int getY()
return y;
public int getX()
return x;
@Override
public String toString()
return "Center: " + "(" + center.getX() + "," + center.getY() + ")" + "\nRadius: " + this.getRadius()
+ " centimeters";
来自 java 集合 api 的组合示例:HashMap
有一个 Entry
类。如果HashMap
对象被删除,则地图中包含的所有Entry
对象也会随之删除。
聚合也是Object Composition 的一种类型,但不如组合强。它定义了“HAS A”关系。用非常简单的话来说,如果A类有B类的引用并且删除B不会影响A的存在,那么它就是聚合。您一定在某个时候使用过它。
【讨论】:
在 java 代码中有什么特殊的方法可以区分它们吗?你的例子真的很好,但面试官真的把我赶走了。正如你给我的链接我已经读过它我也给出了与汽车相关的相同例子,但他说我“这是理论概念,这种类型的讨论永远不会结束!! !我只需要你将如何实现组合和聚合?它们在实现方面有何不同?“。我不知道面试官需要什么?还有什么与此相关的吗? @NiravKamani 我不知道区分它们的任何具体方法。对于组合,存在很强的关系。 HashMap 就是一个很好的例子。不知道你的面试官的期望是什么,可能你可以给出 java api 的例子或者你工作过的项目的例子。不要被这样的面试官惹恼,因为有时他们自己也不清楚基本面。祝你好运!【参考方案2】:A 想在解释的答案中添加更多信息
聚合是关联的一种特殊形式(关联是通过它们的对象建立的两个独立类之间的关系。关联可以是一对一、一对多、多对一、多-对多)
聚合表示 Has-A 关系。 这是一种单向关联,即单向关系。例如,部门可以 有员工,但反之亦然是不可能的,因此是单向的 在自然界。 在聚合中,两个条目都可以单独存在 这意味着结束一个实体不会影响另一个实体。组合是一种受限的聚合形式,其中两个实体高度依赖于彼此。
它代表关系的一部分。 在组合中,两个实体相互依赖。 当两个之间有组合时 实体,组合对象不能没有其他实体而存在。聚合与组合
- 依赖关系: 聚合意味着孩子可以 独立于父母而存在。例如,部门和 员工,删除部门,员工仍然存在。然而 组合暗示了一种孩子不能存在的关系 独立于父母。示例:人与心,心不 与人类分开存在。
- 关系类型: 聚合关系 是“has-a”,组合是“part-of”关系。
- 关联类型: 组合是强关联,而聚合 是一个弱关联。
参考:https://www.geeksforgeeks.org/association-composition-aggregation-java/
【讨论】:
以上是关于Java 代码中的聚合和组合的主要内容,如果未能解决你的问题,请参考以下文章