考虑下面的两个图表。顶部的右端包含一个普通箭头,底部的左端包含一个带有菱形的箭头,右端包含一个普通箭头。伟大的书 GoF使用了这两种图表。
我想了解钻石在第二种情况下表示什么,以及这两种情况中的哪一种在Customer
和之间给出了更强的关联Order
。
在这两种情况下,类是否Customer
负责类的生命周期?Order
考虑下面的两个图表。顶部的右端包含一个普通箭头,底部的左端包含一个带有菱形的箭头,右端包含一个普通箭头。伟大的书 GoF使用了这两种图表。
我想了解钻石在第二种情况下表示什么,以及这两种情况中的哪一种在Customer
和之间给出了更强的关联Order
。
在这两种情况下,类是否Customer
负责类的生命周期?Order
如果没有钻石,那么我们就有了一个简单的关联。
如果菱形为空,则表示它是一个聚合。这种关系比简单的关联要强。在这种情况下,客户聚合订单。
如果菱形是黑色的,则表示它是一个组合,它比聚合还要强,因为聚合的类不能被其他类聚合。它的“生命”取决于容器。
我认为它解释得更清楚一点,在:
客户和订单是一种“有”的组合关系,因为如果客户不复存在,他/她的订单也会不复存在。因此,容器(客户)和该容器内的实例(订单)之间存在生命周期依赖关系。当容器不再存在时,它的所有实例也不再存在。
另一方面,如果我们说客户有一本书。在这种情况下,我们有一个“has-a”聚合关系。因为如果客户不复存在,这本书仍然可用。
它表示聚合。来自维基百科:
在 UML 中,它以图形方式表示为树的包含类末端上的空心菱形,用一条线将包含类连接到包含类。聚合在语义上是一个扩展对象,在许多操作中被视为一个单元,虽然它在物理上是由几个较小的物体组成的。