这是聚合吗?

Is this an aggregation?

我有以下代码

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

    b = null;
}

这是聚合吗?我一直认为聚合是当某些东西仍然可以 "live" 即使另一个 class 是 "destroyed"... 例如 Car 和 Engine。如果我删除 Car 实例,Engine 仍然可以运行。

这是正确的吗?

首先,我会说当你这样做时你的代码看起来会更好

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

会更好看。

那么关于你的聚合思想,是的,你是对的。 "Somehow"。但是如果你真的把你的 "objects" 细粒度地分开的话。我的意思是,如果汽车没有引擎,你会拥有它吗? :)

我实际上会看到汽车的原样,我会认为更多的是汽车和 Driver 的聚合。如果汽车仍然损坏,您还有 Driver。如果 Driver 死了,你还有车。

来自uml关于聚合:

聚合是"has a"关联关系的变体;聚合比关联更具体。它是一个表示 part-whole 或 part-of 关系的关联。作为关联的一种类型,聚合可以命名并具有与关联相同的装饰。但是,聚合可能不会涉及两个以上的 class;它必须是二元关联。

当 class 是一个 collection 或其他 class 的容器时,可以发生聚合,但包含的 class 对容器。容器内容不会在容器被销毁时自动销毁。

composition/aggregation

另一个与聚合混淆的关系是组合。当聚合描述 "has" 关系时,组合会执行 "contains/part of" 关系。正如我所说,通常情况下,引擎是 for you car object right (composition) 的一部分。汽车 object 有一个 Driver(聚合)。

有些东西仍然可以 "live" 即使另一个 class 是 "destroyed"。

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

在对象 A "owns" B 中,组合更强。B 除了与 A 相关之外没有其他目的。