在Java中,組合和聚合是兩種常用的對象關系模型。他們可以通過嵌套多個對象來實現對象的復雜性描述。
組合是指一個對象作為另一個對象的部分,是一種強依賴的關系。換言之,一個對象的存在依賴于另一個對象的存在。通常,組合關系在代碼中的表示方法是在類中聲明一個成員變量,這個成員變量的類型是另一個類的對象。
public class Car{ private Engine engine; public Car(){ engine = new Engine(); } }
上述代碼中,Car類包含一個Engine類型的engine成員變量。Car對象的創建取決于Engine對象是否存在。
聚合則是一種弱依賴的關系,它是指一個對象是另一個對象的容器,可以容納多個對象,但是容器的存在與其中元素的存在并不強關聯。在代碼實現中,通常是將容器對象作為另一個類的成員變量,同時容器對象可以允許項目中其他類的對象加進來。
public class Library{ private ArrayListbooks; public Library(){ books = new ArrayList (); } public void addBook(Book book){ books.add(book); } }
上方代碼中,Library包含一個ArrayList類型的books成員變量。這個books可以容納多個Book對象,但是Library對象的創建與這些Book對象無關。
在實際使用中,需要根據對象之間的依賴關系選擇合適的關系模型。如果一個對象是另一個對象的一部分,那么就應該采用組合關系;如果兩個對象之間不存在強關聯,那么就采用聚合關系。當然,在不同情況下,這兩種關系模型也會互相組合使用。