我面临着一个持续的问题,将委托,组成和聚合彼此区分开来,并确定最佳使用的情况。
我已经咨询了一个java OO分析和设计书,但我的困惑仍然存在。主要的解释是:
委托:当我的对象使用另一个对象的功能,而不改变它。
组成:我的对象包括其他对象,而这些对象在我的对象被销毁之后又不能存在 – 垃圾收集。
聚合:我的对象包括其他对象,即使在我的对象被销毁后也可以生存。
是否有可能有几个简单的例子来演示每个案例,以及他们背后的推理?这些例子如何可以演示除了我的对象简单地引用另一个对象?
提前谢谢了。
在所有这三种情况下,你的对象将引用另一个对象。区别在于引用对象的行为和/或生命周期。一些例子:
>组成:房子包含一个或多个房间。房间的生活是由房子控制的房间将不存在没有房子。
>聚集:玩具屋建在块。你可以拆卸它,但块会保留。
>委托:你的老板要你给他一杯咖啡,你已经有一个实习生为你做。委托不是一种类型的关联(如组合/聚集)。后两个讨论了Stack Overflow many times
在注释中,你会问如何在每种情况下实现会有所不同,观察在所有情况下我们调用相关对象上的方法。这是真的,在每种情况下,我们会有代码,如
myRoom.doWork(); myBlock.doWork(); myMinion.doWork();
但不同之处在于相关对象的生命周期和基数。
对于组件,房间在房子创建时就存在了。所以我们可以在房子的构造函数中创建它们。
在协会的情况下(我会使用轮胎和汽车)汽车可能会添加轮胎在他们的构造函数,但后来你可能想要删除和更换轮胎。所以你也有类似的方法
removeTyre(FrontLeft) addNewTyre(aTyre,BackRight)
很有可能aTyre对象来自一个工厂 – 我们没有新的任何Car的方法。
在委派的情况下,您可能甚至没有成员变量来保存委托
resourcingPool().getIntern().getCoffee(SkinnyLatte,workstation 7);
对象之间的关系持续只要实习生正在取咖啡。然后它返回到资源池。