聚合与组合都属于关联的形式。两者十分相似但又有区别,本文来介绍下Java中的组合与聚合。
聚合
聚合关系中部分与整体之间并没有相同的生命周期,整体消亡后部分可以独立存在,并且多个整体可以共享部分。例如汽车与车轮,汽车报废车轮还是能独立存在。
以代码为例:
public class Case
{
private Pen pen;
public Case(Pen pen)
{
this.pen = pen;
}
public void go()
{
pen.pen();
}
public static void main(String[] args)
{
Pen pen = new Pen();
Case cases = new Case (pen);
cases.go();
}
}
class Pen
{
public void pen()
{
System.out.println("pen");
}
}
最后输出的结果仍然是pen。说明在cases被更改后,pen并没有被改变。
组合
组合关系中整体拥有部分的生命周期,所以整体删除时,部分一定会跟着删除。而且,多个整体不可以同时间共享同一个部分。
以代码为例:
public class Man
{
private Head head;
public Man()
{
head = new Head();
}
private void go()
{
head.head();
}
public static void main(String[] args)
{
new Man().go();
}
}
class Head
{
public void head()
{
System.out.println("head");
}
}
在这段代码中head作为部分是跟着man一起赋予的,所以在man被改动后head也跟着被改变。