📜  关联与聚合的区别(1)

📅  最后修改于: 2023-12-03 14:50:05.691000             🧑  作者: Mango

关联与聚合的区别

概述

在面向对象编程中,关联和聚合都是对象之间的关系,它们描述了对象间的联系。

关联是指两个对象之间的联系,可以是单向的,也可以是双向的。例如,一个订单对象与一个用户对象之间就存在着关联关系。

聚合是指“拥有关系”,表示一个对象包含了其他对象,但这些对象并不是必须的,可以存在独立于聚合对象之外。例如,一个图书馆对象包含了多个书籍对象,但这些书籍对象可以独立存在于图书馆之外。

关联
单向关联

单向关联是指两个对象之间的关联关系只能在一个方向上访问。例如:

public class Order {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

public class User {
    // ...
}

在上述代码中,订单对象存在一个与用户对象的单向关联关系,订单对象可以访问用户对象,但是用户对象无法访问订单对象。

双向关联

双向关联是指两个对象之间的关联关系可以在两个方向上访问。例如:

public class Order {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
        user.getOrders().add(this);
    }
}

public class User {
    private List<Order> orders = new ArrayList<>();

    public List<Order> getOrders() {
        return orders;
    }

    // ...
}

在上述代码中,订单对象存在一个与用户对象的双向关联关系,订单对象可以访问用户对象,用户对象也可以访问订单对象。

聚合

聚合是指一个对象包含了其他对象,被包含的对象可以独立存在于聚合对象之外。例如:

public class Library {
    private List<Book> books = new ArrayList<>();

    public List<Book> getBooks() {
        return books;
    }

    // ...
}

public class Book {
    private String name;

    public String getName() {
        return name;
    }

    // ...
}

在上述代码中,图书馆对象包含了多个书籍对象,但这些书籍对象可以独立存在于图书馆之外。

总结

关联和聚合都是面向对象编程中描述对象之间关系的方式,其中关联是描述两个对象之间的联系,可以是单向的也可以是双向的;而聚合是描述一个对象包含了其他对象,被包含的对象可以独立存在于聚合对象之外。对于程序员而言,理解和使用关联和聚合是设计出良好的面向对象模型的必备知识。