这是聚合吗?

我有以下代码

public static void main(String[] args) { Engine engine = new Engine("This Engine!"); Car b = new Car(engine); b = null; } 

这是聚合吗? 我总是认为聚合是指即使另一个类被“摧毁”,某些东西仍然可以“生存”……例如Car and Engine。 如果我删除Car实例,引擎仍然可以存在。

它是否正确?

首先,我会说你的代码看起来会更好

 Car b = new Car(); b.setEngine(engine); 

看起来会更好。

然后关于你的聚合思考,是的,你是对的。 “不知何故”。 但是,如果你真的分裂你的“对象”细粒度。 我的意思是,如果没有发动机,你会有车吗? 🙂

我实际上会看到这辆车, 我想更多的是汽车和司机的聚合。 如果汽车损坏,你仍然有一个司机。 如果司机死了,你还有车。

uml关于聚合:

聚合是“有”关联关系的变体; 聚合比关联更具体。 它是一个代表整体或部分关系的协会。 作为一种关联,可以命名聚合并使用与关联相同的装饰。 但是,聚合可能不涉及两个以上的类; 它必须是二元关联。

当类是其他类的集合或容器时,可能会发生聚合,但所包含的类对容器没有强大的生命周期依赖性。 容器的内容不会自动销毁。

组合物/聚合

混淆的另一个关系是组合。 当聚合描述“有”关系时,该组合执行“包含/部分”关系。 正如我所说的,通常情况下,引擎是你汽车对象权利(组成)的一部分。 Car对象有一个Driver(聚合)。

即使其他阶级被“摧毁”,某些东西仍然可以“活”起来。

是的,聚合是B独立于A存在的地方,例如,员工在没有经理的情况下仍然存在。

在对象A“拥有”B的情况下,复合更强。除了与A相关之外,B没有任何目的。