java - Java 代码中的聚合和组合

标签 java relationship aggregation composition

由于聚合和组合是相关的关联,或者我们可以说它给出了对对象或其他任何事物之间关系的理解。

我发布这个问题是因为我在面试中问了一个问题,什么是组合和聚合。

所以根据我的理解,我给出了我的想法如下。

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/

相关文章:

c++ - 正确使用 std::unique_ptr 和 std::weak_ptr

java - 使用内置注释创建自定义验证注释

java - 连接到 Outlook.com smtp 服务器时出现 Spring 邮件错误

ios - Swift - 核心数据关系 - 专辑风格

docker - 将收集到的数据传递给在 Docker 容器中运行的 Statsd

c++ - 两个对象的相互依赖

java - 如何从数组末尾删除一个元素并将其插入到前面

java - 对对象集合进行排序的有效方法

sql-server - 来自不同数据库的表之间的关系

mysql - 这是否应该是一种识别关系?