我面临着一个持续的问题,即彼此区分授权,组合和聚合,并确定最好使用一个而不是另一个的情况.
我已经查阅了Java OO分析和设计书籍,但我的困惑仍然存在.主要解释是:
委托:当我的对象使用另一个对象的功能而不更改它时.
组成:我的对象由其他对象组成,这些对象在我的对象被销毁之后又不能存在 – 垃圾收集.
聚合:我的对象包含其他对象,即使在我的对象被销毁之后也可以存活.
是否有可能有一些简单的例子来说明每个案例,以及它们背后的原因?除了我的对象只是引用另一个对象之外,还能展示这些示例吗?
在所有三种情况下,您的对象将引用另一个对象.不同之处在于引用对象的行为和/或生命周期.一些例子:
原文链接:https://www.f2er.com/javaschema/281998.html>组成:房子包含一个或多个房间.房间的使用寿命由House控制,因为没有House,房间将不存在.
>聚合:从块建造的玩具屋.您可以拆卸它,但块将保留.
>代表团:你的老板让你给他一杯咖啡,你有一个实习生代替你.委托不是一种关联(如组合/聚合).后两者已在Stack Overflow many times上讨论过
在评论中,您询问在每种情况下实现方式如何不同,观察在所有情况下我们都在相关对象上调用方法.确实,在每种情况下我们都会有代码,例如
myRoom.doWork(); myBlock.doWork(); myMinion.doWork();
但不同之处在于相关对象的生命周期和基数.
对于组件,房间在创建房屋时就会存在.所以我们可以在House的构造函数中创建它们.
在协会(我将使用轮胎和汽车)的情况下,汽车可能会在他们的构造中添加轮胎,但后来您可能想要拆卸和更换轮胎.所以你也有像
removeTyre(FrontLeft) addNewTyre(aTyre,BackRight)
并且aTyre对象很可能来自工厂 – 我们没有在任何Car的方法中使用它.
在委托的情况下,您甚至可能没有成员变量来保存委托
resourcingPool().getIntern().getCoffee(SkinnyLatte,workstation 7);
只要实习生拿取咖啡,对象之间的关系就会持续.然后它返回资源池.