两种方式构成一个好的设计,以建立两个不同类的对象之间的通信?

时间:2013-07-08 09:04:46

标签: oop composition

让一个类具有对另一个类(Composition)的引用是一个很好的OOD实践,其中inturn具有对同一个类的引用?

ClassA -----> ClassB和ClassB -----> ClassA ??

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

1 个答案:

答案 0 :(得分:3)

这种关系是循环依赖。本身,它只有缺点。它可以阻止许多垃圾收集者死在他们的轨道上。释放对象需要在A和B的客户端之间进行协商,因为A的所有客户端本身也是B的客户端,反之亦然。

鉴于这种相互依赖性,您应该引入另一个管理相互依赖对象集合的对象。客户可以与经理协商,决定何时完成所有工作,并且可以释放资源。

要避免此问题,请将对象的上下文作为函数参数(或类似的瞬态,本地状态)传递给对象,而不是使用持久成员。