由于聚合和组合是相关的关联,或者我们可以说它给出了对对象或其他任何事物之间关系的理解。
我发布这个问题是因为我在面试中问了一个问题,什么是组合和聚合。
所以根据我的理解,我给出了我的想法如下。
http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition
Aggregation, Association and Composition
Association vs. Aggregation vs. Composition in Java
还访问了更多。
我的基本解释是聚合表示松散关系,而组合表示强关系以及与此相关的清晰解释。
但是面试官侮辱了我,并说这是你说的理论概念,我想要完美的 Java 代码,其中它们有何不同,并且还告诉我,如果我会给你一个小型应用程序,那么你将如何识别它这是聚合,这是组合?
现在我想了解纯粹的技术概念和 Java 代码,它们有何不同以及它是什么?
最佳答案
考虑一个 LinkedList
类的简单示例。 LinkedList
由节点
组成。这里 LinkedList
类是所属对象。当它被销毁时,其中包含的所有节点都将被删除。如果从列表中删除 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 - Java 代码中的聚合和组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20304116/