组合是整体/部分的关系。编码组合关系的常用方法是在组合(整体)对象的构造函数中创建部分对象。java中的示例:
public class Car {
private String brand;
private ArrayList<Tire> theFourTires = new ArrayList<Tire>();
public Car(String brand)
{
this.brand = brand;
for (int i = 1; i < 5;i ++)
{
// here the "composition" relationship
theFourTires.add(new Tire());
}
}
当我们想决定哪些对象将成为部件时,我们可以使用add ...方法将部件对象添加到组合中。您必须遵守这条规则(UML 规范):部分对象不能被共享(被另一个对象引用,除了复合对象)。所以,我认为最好,当你调用 add 方法时,不要在调用 add 方法的方法中引用 part 对象,就像这样,在 Car 类中:
public void addPart(CarParts aPart)
{
this.parts.add(aPart);
}
从另一个对象调用 add 方法:
Car c = new Car("Ford Torino");
c.addPart(new Tire());
代替
Tire t = new Tire();
c.addPart(t);
因为在这种情况下,实例是通过t引用共享的,即使是很短的时间,组合关系也变成了聚合。在这种情况下,您可以在 t 对象上调用方法并违反部分对象的封装。零件对象必须仅由组合管理。你怎么看待这件事 ?感谢世界!