区分委派,组合和聚合(Java OO设计)
我面临着一个持续的问题,那就是将授权,组成和聚合彼此区分开来,并确定在哪种情况下最好相互使用。
我已经查阅了一本Java OO分析和设计书,但是我的困惑仍然存在。主要的解释是这样的:
:当我的对象按原样使用另一个对象的功能而不更改它时。
:我的对象由其他对象组成,这些对象在我的对象被销毁并收集垃圾后便不再存在。
:我的对象由其他对象组成,即使我的对象被破坏,它们也可以存在。
是否可以有一些简单的示例来说明每种情况及其背后的原因?除了我的对象仅引用另一个对象之外,还可以如何演示这些示例?
回答:
在这三种情况下,您的对象都将引用另一个对象。区别在于引用对象的行为和/或生命周期。一些例子:
组成:房屋包含一个或多个房间。房间的寿命由房子控制,因为没有房子就不会存在房间。
聚集:由积木建造的玩具屋。您可以拆卸它,但仍会保留块。
代表团:您的老板要您给他喝杯咖啡,您有个实习生替您做。委托不是一种关联类型(就像组合/聚合一样)。
在评论中,您询问实现在每种情况下的不同之处,观察到在所有情况下我们都会在相关对象上调用方法。的确,在每种情况下,我们都会有如下代码
myRoom.doWork();myBlock.doWork();
myMinion.doWork();
但是区别在于相关对象的生命周期和基数。
对于组件,房间在创建房屋时就存在。因此,我们可以在众议院的构造函数中创建它们。
对于协会(我将使用“轮胎和汽车”),汽车可能会在其构造函数中添加轮胎,但是稍后您可能希望移除并更换轮胎。所以你也有像
removeTyre(FrontLeft) addNewTyre(aTyre, BackRight)
而且aTyre对象很有可能来自Factory- new
在Car的任何方法中我们都没有。
对于委派,您甚至可能没有成员变量来保存委托
resourcingPool().getIntern().getCoffee(SkinnyLatte, workstation 7);
对象之间的关系仅在实习生取咖啡时才持续。然后,它返回到资源池。
以上是 区分委派,组合和聚合(Java OO设计) 的全部内容, 来源链接: utcz.com/qa/418516.html