区分委派,组合和聚合(Java OO设计)

前端之家收集整理的这篇文章主要介绍了区分委派,组合和聚合(Java OO设计)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我面临着一个持续的问题,即彼此区分授权,组合和聚合,并确定最好使用一个而不是另一个的情况.

我已经查阅了Java OO分析和设计书籍,但我的困惑仍然存在.主要解释是:

委托:当我的对象使用另一个对象的功能而不更改它时.

组成:我的对象由其他对象组成,这些对象在我的对象被销毁之后又不能存在 – 垃圾收集.

聚合:我的对象包含其他对象,即使在我的对象被销毁之后也可以存活.

是否有可能有一些简单的例子来说明每个案例,以及它们背后的原因?除了我的对象只是引用另一个对象之外,还能展示这些示例吗?

在所有三种情况下,您的对象将引用另一个对象.不同之处在于引用对象的行为和/或生命周期.一些例子:

>组成:房子包含一个或多个房间.房间的使用寿命由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);

只要实习生拿取咖啡,对象之间的关系就会持续.然后它返回资源池.

原文链接:https://www.f2er.com/javaschema/281998.html

猜你在找的设计模式相关文章