我面临着一个持续的问题,那就是将授权,组成和聚合彼此区分开来,并确定在哪种情况下最好相互使用。
我已经查阅了一本Java OO分析和设计书,但是我的困惑仍然存在。主要的解释是这样的:
委托 :当我的对象按原样使用另一个对象的功能而不更改它时。
组成 :我的对象由其他对象组成,这些对象在我的对象被销毁并收集垃圾后便不再存在。
聚集 :我的对象由其他对象组成,即使我的对象被破坏,它们也可以存在。
是否可以有一些简单的示例来说明每种情况及其背后的原因?除了我的对象仅引用另一个对象之外,还可以如何演示这些示例?
在这三种情况下,您的对象都将引用另一个对象。区别在于引用对象的行为和/或生命周期。一些例子:
组成:房屋包含一个或多个房间。房间的寿命由房子控制,因为没有房子就不会存在房间。
聚集:由积木建造的玩具屋。您可以拆卸它,但仍会保留块。
代表团:您的老板要您给他喝杯咖啡,您有个实习生替您做。委托不是一种关联类型(就像组合/聚合一样)。
在评论中,您询问实现在每种情况下的不同之处,观察到在所有情况下我们都会在相关对象上调用方法。的确,在每种情况下,我们都会有如下代码
myRoom.doWork();
myBlock.doWork();
myMinion.doWork();
但是区别在于相关对象的生命周期和基数。
对于组件,房间在创建房屋时就存在。因此,我们可以在众议院的构造函数中创建它们。
对于协会(我将使用“轮胎和汽车”),汽车可能会在其构造函数中添加轮胎,但是稍后您可能希望移除并更换轮胎。所以你也有像
removeTyre(FrontLeft)
addNewTyre(aTyre, BackRight)
而且aTyre对象很有可能来自Factory- new
在Car的任何方法中我们都没有。
对于委派,您甚至可能没有成员变量来保存委托
resourcingPool().getIntern().getCoffee(SkinnyLatte, workstation 7);
对象之间的关系仅在实习生取咖啡时才持续。然后,它返回到资源池。
按组合并返回结果 1,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用一次返回结果,合并结果返回,这样就可以实现聚合菜单项。 相关代码可以参考 dubbo 项目中的示例 配置 搜索所有分组 <dubbo:reference interface="com.xxx.MenuService" group="*" merger="true" /> 合并指定分组
我正在通过下面的链接来找出组合和聚合之间的区别。 https://www . geeks forgeeks . org/association-composition-aggregation-Java/ 我能够理解,组合意味着一种关系,其中子项不能独立于父项而存在,而聚合意味着子项可以独立于父项存在的关系。但是无法理解我如何以编程方式区分它.下面是链接中给出的聚合和组合示例。在这两种情况下,类在结
我开始研究 OOAD,我很难找到一个 代码示例来说明如何以编程方式实现、和。(到处都有几篇文章,但它们与 C# 或 Java 有关)。我确实找到了一两个例子,但它们都与我的导师的指示相冲突,我很困惑。 我的理解是,在: < li >关联:Foo有一个指向Bar对象的指针作为数据成员 < li >聚合:Foo有一个指向Bar对象的指针,Bar的数据被深度复制到该指针中。 < li >组成:Foo有一
给java类一些东西 我有一张物品清单 我希望能够对它们进行排序,这样它们就可以按照每个父对象的虚数的累积和排序,然后再按照虚数排序。 所以我最终 我知道用parentKey和sum of noThings映射它是 我想,也许包装我的Something类并获得每个父项的总密钥可能会在某种程度上起作用。 但看起来工作量很大,不太优雅。 如有任何意见/想法,将不胜感激。
我正在查找与url匹配但返回自定义对象的记录。 我有这个模型。。 我想查询该模型并匹配url,但返回如下响应: 我需要能够通过将记录的ip与过程中的变量进行比较,动态计算反应的ip是否为真。 一次尝试是 但我似乎无法集中IP并查看我的变量IP是否在该数组中。 谢谢你的帮助。我第一次问!
问题内容: 这个问题已经在这里有了答案 : 11年前关闭。 组合和聚合之间有什么区别?有人可以给我这个OOAD的样品吗? 问题答案: 在这里找到 “聚合和组合都是特殊的关联。聚合用于表示所有权或整体/部分关系,而组合用于表示甚至更强的所有权形式。有了组合,我们得到部分与整体的重合寿命。从创建和销毁的角度出发,复合对象对其各个部分的布置负全责。 而且,合计末端的多样性不能超过一;即,它是不共享的。一