当前位置: 首页 > 知识库问答 >
问题:

多个对象是否可以聚合、熟悉或实例化同一个对象?

孙明德
2023-03-14

Gamma等人所说的设计模式

考虑对象聚合和熟悉之间的区别,以及它们在编译和运行时的表现方式。

聚合意味着一个对象拥有或负责另一个对象。一般来说,我们所说的一个物体具有或是另一个物体的一部分。聚合意味着聚合对象及其所有者具有相同的生存期。

熟人关系意味着一个对象仅仅知道另一个对象。有时熟人关系被称为“关联”或“使用”关系。熟人对象可能会请求彼此的操作,但它们并不对彼此负责。熟人关系比聚合关系弱,表明对象之间的耦合要松散得多。

另一个有用的东西是哪些类实例化了哪些其他类。我们称之为“创造”关系。箭头指向实例化的类。在图c中,

多个对象可以聚合同一个对象吗?如果对象A聚合对象B,另一个对象C也可以聚合B吗?

多个对象可以认识同一个对象吗?如果对象 A 认识对象 B,另一个对象 C 也可以认识对象 B 吗?

多个对象可以实例化同一个对象吗?

共有1个答案

端木渝
2023-03-14

根据我的理解和我所知道的常见定义,组合是一种关联,其中关联对象的生存期与所有者的生存期相关联。聚合描述了一种关联,其中聚合对象的生存期独立于所有者的生存期。相识与联想相同。

根据这个定义,一个对象可以由聚合关联中的多个所有者聚合。如果关联是组合类型,那么根据定义,共享是不打算的。

关联或熟人是对对象之间关系的更通用的描述。因此,如果单个html" target="_blank">对象可以有多个所有者,则取决于关系的详细信息。但是当它是通用的时,通常是可能的。

维基百科对象组成和聚合

但我认为还有另一个定义是由马丁·福勒提出的。这就是你引用的那个。对我来说,这是一个鲜为人知的定义,因为我所呈现的定义是在UML规则中定义的,这些规则被广泛传播并成为事实上的标准。根据M.Fowler的定义,聚合等于合成,而熟人与聚合的UML定义相匹配。

因此,当通过 M. Fowler 的眼睛看时,您的问题的答案是:在谈论 Fowler 聚合时,组合规则适用,这意味着多个所有者无法聚合相同的对象,并且就熟人而言,UML 定义的聚合关联的规则适用,这意味着多个所有者可以独立地(从他们的生命周期开始)认识相同的对象。

当然,您可以根据需要随时创建对象的实例,或者在内存可用的情况下随时随地创建。对象或类只是定义,而实例(作为实例化的结果)是实际分配的存储区域,用于存储对象的数据(例如字段)。类定义描述了这个分配的内存区域的布局。

 类似资料:
  • 我正在尝试编写一个简单的应用程序,其中包含一个跟踪每个用户支付的款项的表和一个包含每个用户支付的总金额(所有付款的总和)的第二个表。目前,两个表都有相同的字段(firstName、lastName、金额),我已经将它们从同一个Java类映射到多个表,我无法将该类映射到多个表。对此有什么简单的解决方案吗?

  • 问题内容: 是否可以创建一个使用EasyMock实现多个接口的模拟对象? 例如,接口和接口? 在Rhino Mocks中,创建模拟对象时可以提供多个接口,但是EasyMock的方法仅采用一种类型。 是否可以通过EasyMock来实现此目的,而不必依靠创建扩展了和的临时接口,然后进行模拟的后备呢? 问题答案: EasyMock不支持此功能,因此您会陷入临时接口的后备状态。 顺便说一句,我闻到了一些代

  • 问题内容: var arrObj = [{a:1, b:2},{c:3, d:4},{e:5, f:6}]; 如何将其合并为一个obj? 问题答案: 如果您的环境支持,那么您可以像这样简洁地进行操作 ES5解决方案: 您可以使用这样的 此解决方案仅将的所有键及其值收集在中的每个对象中,最终将结果返回给我们。 这张支票 有必要确保我们在结果中不包括所有继承的可枚举属性。

  • 我有两个不同的XML结构,我想映射到一个域对象。我正在使用MOXy的外部绑定支持,所以我可以选择动态使用哪个绑定。 我的问题是。我有一个如下所示的XML结构: 我想要一个

  • 本文向大家介绍python判断一个对象是否可迭代的例子,包括了python判断一个对象是否可迭代的例子的使用技巧和注意事项,需要的朋友参考一下 如何判断一个对象是可迭代对象? 方法是通过collections模块的Iterable类型判断: 以上这篇python判断一个对象是否可迭代的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 比如有收藏,,。任何避免迭代器循环的方法都可以通过Java 8流API交错这些集合以获得以下结果- 吗? 问题答案: 我不确定Stream API是否有更简单的方法,但是您可以在所有列表的索引上使用流来考虑以下问题: 这将获得给定列表中最大列表的大小。然后,对于每个索引,它使用该列表中每个列表的元素在该索引处形成的流(如果该元素存在的话)进行平面映射。 然后,您可以将其与 使用prot