这是聚合吗?

Posted

技术标签:

【中文标题】这是聚合吗?【英文标题】:Is this an aggregation? 【发布时间】:2015-05-27 00:31:08 【问题描述】:

我有以下代码

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

    b = null;

这是一个聚合吗?我一直认为聚合是指即使另一个类被“破坏”,某些东西仍然可以“存活”……例如 Car 和 Engine。如果我删除 Car 实例,引擎仍然可以运行。

这对吗?

【问题讨论】:

看来你搞错了,因为聚合是关于关系的,或者你可能试图传达这一点 【参考方案1】:

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

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

会更好看。

那么关于你的聚合思维,是的,你是对的。 “不知何故”。但是,如果您真的将“对象”细粒度地拆分,则可以这样做。我的意思是,如果它没有引擎,你会拥有一辆汽车吗? :)

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

来自uml关于聚合:

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

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

组合/聚合

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

【讨论】:

精彩的解释,谢谢!请问您也解释一下空心菱形始终属于哪里?我有点不总是理解它..顺便说一句:我会接受你的回答,但我必须再等几分钟:D 不客气,空心菱形例如汽车---->司机如果这是你问的?钻石接近汽车形状。 我不太明白必须在哪一侧放置空心(或填充)菱形。 填充的钻石用于构图,请参阅我的答案。聚合的空心。 我可能太笨了,无法表达自己。在决定钻石必须放在哪一边时,我遇到了问题。如果我必须把它放在 X 类或 Y 类附近。【参考方案2】:

即使其他类被“摧毁”,某些东西仍然可以“存活”。

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

在对象 A“拥有”B 的情况下,组合更加强大。B 除了与 A 相关之外没有其他目的。

【讨论】:

以上是关于这是聚合吗?的主要内容,如果未能解决你的问题,请参考以下文章

我在这个模型中打破了我的聚合边界吗?

聚合必须是强一致的吗?

我可以在同一台机器上运行多个elasticsearch实例进行日志聚合吗?

如何在时间窗口上应用一个非聚合函数

使用 GET 请求调用聚合函数

es使用与原理6 -- 聚合分析剖析