加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 00:50:40 所属栏目:百科 来源:网络整理
导读:我面临着一个持续的问题,即彼此区分授权,组合和聚合,并确定最好使用一个而不是另一个的情况. 我已经查阅了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);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读