实例化与聚合和相识有何不同?

时间:2019-06-06 14:40:30

标签: design-patterns aggregation

实例化与聚合和相识有何不同? (我已经了解了聚集和相识之间的区别,请参见the quote from the book here

实例化和聚合似乎彼此相似。

我可能还想考虑其他方面

我问过What does "a class instantiates another" mean?,但是对于类之间的实例化关系,我仍然不太清楚。

1 个答案:

答案 0 :(得分:1)

对象的实例化是创建对象实例的过程,由编译器执行。您可以根据需要进行实例化的次数,也可以在内存可用时进行实例化,因为实例化意味着分配内存。实例(作为实例化的结果)是实际分配的存储区,用于存储对象的所有数据(例如字段,变量)。类定义描述了此分配的内存区域的布局。另一方面,聚集以及相识描述了两个或更多对象的关系以及它们的生命周期如何相互链接。结识或聚集的关系是所有权。聚合是指当所有者实例被销毁(从内存中删除)时,拥有(聚合)实例也将被销毁。相识意味着当所有者实例被破坏时,所拥有的实例将继续存在于内存中。实例化通过分配实例被销毁时释放的内存来创建实例。

我们来看一所房子。也许我们在这里找到了一些比喻,可以帮助您更好地理解它:

类或对象就像由建筑师(建筑师=开发人员)创建的施工计划。该计划告诉建造者(编译器)如何建造房屋。成品房子是施工计划的体现,实例是对象(类)的表现。因此,实例仅意味着对象已创建,存在并处于活动状态。

房屋的所有实体(例如楼梯和房间)也是根据建筑师的计划在大小和位置上建造(实例化)的物体。这意味着房屋是由其他对象实例组成的对象实例。所有这些实例共存以创建建筑物,但是当仔细观察时,我们可以将这种共存描述为一种关系:房屋或房屋。我们甚至可以更仔细地研究这种关系,并问自己,当我们看房子时,这种关系的影响是什么,是否还存在其他类型的关系。自己的建筑师Martin Fowler发现并描述了两种不同的类型:

聚集是指所有者(建筑物实例)被销毁时建筑物实例的房间实例被销毁。一个房间实例实际上仅存在于一个建筑物实例(所有者或对象实例)中。

相识是指建筑物被毁时房客还活着的时候。他将搬到另一栋大楼租一间公寓。租户可以在不同的房屋中租用多个地方。租户是与房屋相关的另一个实体或对象实例,而租户的DNA是对象或类,创建者的施工计划告诉他该实例的外观以及实例化后他将具有的属性(出生)。