我试图确认我对代码的关联,聚合和组成。所以这里..
汇总:Has-a。它具有另一种类型的现有对象
public class Aggregation { SomeUtilityClass objSC public void doSomething(SomeUtilityClass obj) { objSC = obj; } }
作文:由另一个对象组成
public class Composition { SomeUtilityClass objSC = new SomeUtilityClass(); public void doSomething() { objSC.someMethod(); } }
协会:我有两个意见。
>当一个类与另一个类相关联时。因此,以上都是关联的例子。
>关联是一种较弱的聚合形式,其中类不会引用它接收到的对象。
public class Association { //SomeUtilityClass objSC /*NO local reference maintained */ public void doSomething(SomeUtilityClass obj) { obj.DoSomething(); } }
我的理解是正确的吗?我已经阅读了相互矛盾的文章here和here,所以我真的不确定哪一个要遵循。我的理解似乎符合第一个环节。我觉得第二个链接是错误的,或者也许我没有理解它。
你怎么看?
聚合和组合之间的区别是相当模糊的,并且AFAIK与容器被破坏后的“小孩”对象的逻辑存在有关。因此,在集合的情况下,在容器对象被破坏之后,容器中的对象仍然可以存在,而在组合设计的情况下,它们也被消除。一些类比:
> Car对象包含四个Wheel对象。通常,如果你摧毁了汽车(通过调用一些方法来清理它),你也应该在这个过程中摧毁车轮,因为它们不在车外存在(除非你把它们移动到另一个车辆对象)。更实际地,包装输入流的读取器对象也将在内部流自身关闭时关闭内部流。这是组合。
一个Person对象包含(拥有)一个Radio对象。如果该人死亡,该电台可能会被另一个人继承,即使没有原始拥有者也可以存在该电台。更实际的是,当列表本身被处理时,包含对象的列表不要求所有对象被排除。这是聚合。
编辑:阅读你的链接后,我会倾向于第一个去,因为它给出了一个类似于我的解释。
另外,关联只是通过对该对象的引用来调用一个方法(发送消息)给另一个对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。