组合与聚合
讲述组合与聚合的关系我们通过类比来进行。大雁喜欢热闹害怕孤独,所以他们一直过着群居
的生活,每只大雁都有自己的雁群,而每个雁群都有许多的大雁,这样的大雁与雁群的关系即是聚合关系。然而每只大雁都有两只翅膀,大雁和翅膀的关系则是组合关系,由此可见,聚合的关系远远没有组合来的密切,大雁不会因为脱离了雁群而无法生存,但是会因为失去翅膀而无法生存。
从代码上看这两种关系的不同主要在于构造函数的不同:
雁群类:
public class GooseGroup{
public Goose goose;
public GrooseGroup(Groose groose){
this.groose=groose;
}
}
大雁类:
public class Goose
{
public Wings wings;
public Goose()
{
wings=new Wings();
}
}
聚合关系的类里含有另一个类作为参数
雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在
组合关系的类里含有另一个类的实例化
大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在
信息的封装性不同
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的
而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。