Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 能否有多个对象聚合、熟悉或实例化同一个对象?_Design Patterns_Aggregation - Fatal编程技术网

Design patterns 能否有多个对象聚合、熟悉或实例化同一个对象?

Design patterns 能否有多个对象聚合、熟悉或实例化同一个对象?,design-patterns,aggregation,Design Patterns,Aggregation,Gamma等人提出的设计模式 考虑对象聚合和熟人之间的区别,以及它们在编译和运行时的表现方式有多不同 聚合意味着一个对象拥有或负责另一个对象。一般来说,我们说一个物体拥有另一个物体或是另一个物体的一部分。聚合意味着聚合对象及其所有者具有相同的生存期 熟人意味着一个物体只知道另一个物体。有时,熟人被称为“交往”或“使用”关系。熟悉的对象可能会要求对方进行操作,但他们并不互相负责。相识是一种弱于聚合的关系,表明更松散的耦合 在对象之间 要展示的另一个有用的东西是哪些类实例化了哪些其他类。我们称之为

Gamma等人提出的设计模式

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

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

熟人意味着一个物体只知道另一个物体。有时,熟人被称为“交往”或“使用”关系。熟悉的对象可能会要求对方进行操作,但他们并不互相负责。相识是一种弱于聚合的关系,表明更松散的耦合 在对象之间

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

多个对象是否可以聚合同一个对象? 如果对象A聚合了对象B,那么另一个对象是否可以说C也聚合了对象B

多个物体能认识同一物体吗? 如果物体A认识物体B,另一个物体能说C也认识物体B吗


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

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

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

关联或熟人是对对象之间关系的更一般的描述。因此,如果一个对象可以有多个所有者,这取决于关系的细节。但如果是通用的,通常是可能的

但我认为还有另一个定义是由Martin Fowler提出的。这就是你刚才引用的。对我来说,这是一个鲜为人知的定义,因为我给出的定义是在广泛传播的UML规则中定义的,并且已经成为事实上的标准。根据M.Fowler的定义,聚合等于组合,而熟人与聚合的UML定义相匹配

所以你的问题的答案是,从M.Fowler的角度来看:当谈到Fowler的聚合时,组合规则适用,这意味着多个所有者不能聚合相同的对象。在熟悉度方面,UML定义的聚合关联中的规则适用,这意味着多个所有者可以熟悉相同的对象独立(从他们的一生中)。0


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

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

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

关联或熟人是对对象之间关系的更一般的描述。因此,如果一个对象可以有多个所有者,这取决于关系的细节。但如果是通用的,通常是可能的

但我认为还有另一个定义是由Martin Fowler提出的。这就是你刚才引用的。对我来说,这是一个鲜为人知的定义,因为我给出的定义是在广泛传播的UML规则中定义的,并且已经成为事实上的标准。根据M.Fowler的定义,聚合等于组合,而熟人与聚合的UML定义相匹配

所以你的问题的答案是,从M.Fowler的角度来看:当谈到Fowler的聚合时,组合规则适用,这意味着多个所有者不能聚合相同的对象。在熟悉度方面,UML定义的聚合关联中的规则适用,这意味着多个所有者可以熟悉相同的对象独立(从他们的一生中)。0


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

谢谢。“另一个要展示的有用的东西是哪些类实例化了哪些其他类。我们称之为‘创建’关系。”?多个对象可以实例化同一个对象吗?因此,当对象A、对象B和对象C各自创建对象X的实例时,答案是肯定的。但是当查看对象X的内存位置时,这些实例永远不会相同。谢谢。如果您还可以考虑和实例化创建一个对象实例,而聚合描述RE,我将非常感激。