【发布时间】:2013-07-05 13:16:59
【问题描述】:
让一个类引用另一个类(组合),而该类又引用同一个类,这是一种好的 OOD 做法吗?
ClassA ----->ClassB 和 ClassB ----->ClassA ??
通过这种关系,我可以从 B 更改对象类 A 的状态,反之亦然。这是在对象之间建立通信的良好设计模式,还是有不同的首选方法?
【问题讨论】:
标签: oop composition
让一个类引用另一个类(组合),而该类又引用同一个类,这是一种好的 OOD 做法吗?
ClassA ----->ClassB 和 ClassB ----->ClassA ??
通过这种关系,我可以从 B 更改对象类 A 的状态,反之亦然。这是在对象之间建立通信的良好设计模式,还是有不同的首选方法?
【问题讨论】:
标签: oop composition
这样的关系是循环依赖。就其本身而言,它只有缺点。它可以阻止许多垃圾收集器死在他们的轨道上。释放对象需要 A 和 B 的客户端之间进行协商,因为 A 的所有客户端本质上也是 B 的客户端,反之亦然。
鉴于这种相互依赖关系,您可能应该引入另一个管理相互依赖对象集合的对象。客户都可以和经理协商,决定什么时候完成,什么时候可以释放资源。
为避免此问题,请将对象的引用作为函数参数(或类似的瞬态、本地状态)在上下文中传递,而不是使用持久成员。
【讨论】: