簡體   English   中英

下面的兩個例子有什么不同?

[英]What makes the difference between the two examples below?

是什么使組合與聚合不同,它們都被聲明為私有,是在組合示例中,我們在Person構造函數中創建Address類的對象,如果這就是如何使Person對象控制/擁有Address對象。

public class Person {

    private String firstName;
    private String lastName;
    private Address address;

    //Composition example
    public Person() {
            address = new Address();
    }



    public Address getAddress() {
            return address;
    }


}

員工班

public class Employee {

    private String firstName;
    private String lastName;
    private int age;

    //Aggregation Java example
    private Address address;


    public void setAddress(Address address) {
            this.address = address;
    }
    public Address getAddress() {
            return address;
    }

}

好吧,讓我首先解釋聚合和組合之間的區別。

聚合: 1. 聚合關系中的子項可以獨立於父項而存在 2. 聚合可以讀作“HAS A”

示例:如果我們有一個 Wheel 類,那么 Wheel 和 Car 類之間的關系是一個聚合:“汽車有四個輪子”。 車輪可以脫離汽車的上下文而存在。

組合: 1. 組合關系中的子項不能獨立於父項而存在。 換句話說,如果子類不能托管到父類中,它就沒有存在的意義。 2. Composition 可以讀作IS PART OF

示例:如果我們有一個類 Human,則類 Heart 和 Human 之間的關系是組合。 你從未見過一顆心獨自懸空,不是嗎? 因此,需要組合。


在 Java 中,我們使用private final表示 Composition 關系

class Human { private final Heart heart; }

雖然聚合只是:

class Wheel { ... }
class Car { private List<Wheel> wheels; }

現在讓我們說,我們想完全移除一個 Human 類的對象(考慮到他不是器官捐贈者), Composition 關系迫使我們銷毀與那個人相關的心臟實例。 在聚合中,情況並非如此,如果它們曾經屬於的汽車實例損壞,則其他汽車可以使用車輪。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM