oop - 两种方式组合是在两个不同类的对象之间建立通信的良好设计吗?

标签 oop composition

让一个类引用另一个类(Composition),而另一个类又引用同一个类,这是一个好的 OOD 实践吗?

A类----->B类和B类----->A类??

通过这种关系,我可以从 B 更改对象类 A 的状态,反之亦然。这是在对象之间建立通信的良好设计模式还是有不同的首选方法?

最佳答案

这样的关系是循环依赖关系。就其本身而言,它只有缺点。它可以阻止许多垃圾收集者停滞不前。释放对象需要 A 和 B 的客户端之间进行协商,因为 A 的所有客户端本质上也是 B 的客户端,反之亦然。

考虑到这种相互依赖关系,您可能应该引入另一个对象来管理相互依赖的对象的集合。客户都可以与经理协商决定什么时候一切完成并可以释放资源。

为了避免这个问题,请将对对象的引用作为函数参数(或类似的 transient 、本地状态)传递到上下文,而不是使用持久成员。

关于oop - 两种方式组合是在两个不同类的对象之间建立通信的良好设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522708/

相关文章:

java - 尝试将子类对象添加到父类(super class)数组时出现 ArrayStoreException 错误

php - CakePHP Group 获取用户信息

java - Play2 Java Action 组合 - 如何将多个 Action 串在一起?

programming-languages - "compose well"对某些东西意味着什么?

c++ - 与指针的组成

function - 在Scheme中组合两个函数

java - 在游戏编程项目中,如何处理具有多个实例的多个项目?

Python 应用架构

c# - 应该扩展还是封装 ORM 对象?

oop - 纯组合会破坏 OOP 概念吗?