区分委托,组合和聚合(java OO设计)

我面临着一个持续的问题,将委托,组成和聚合彼此区分开来,并确定最佳使用的情况。

我已经咨询了一个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);

对象之间的关系持续只要实习生正在取咖啡。然后它返回到资源池。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...