java观察者导致循环继承

时间:2015-04-28 15:55:47

标签: java compiler-errors observer-pattern cyclic

假设我有两个类:A属性A.aB属性B.b

A中的某些属性取决于B.b,但A.a不依赖于B.b

B中的某些属性取决于A.a,但B.b不依赖于A.a

我希望A通知B.bB中的更改,以便通知A.a中的更改。如果我使用标准观察者模式:

public class A implements B.Observer {..}

public class B implements A.Observer {..}

我收到编译错误:

  

涉及B(或A)的循环继承。

我意识到这通常会导致无限循环,但在这种情况下它并不存在。例如,如果A.a发生变化,A会通知B。但由于A.aB.b没有影响,因此A没有返回通知,也没有循环。

我很欣赏Java试图阻止一般性问题,但我需要以某种方式实现这一点。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

使用publish-subscribe pattern,其中每个类都是发布者和订阅者。

interface Publisher {
    void addSubscriber(Subscriber sub);
}

interface Subscriber {
    void handle (Object event);
}

class A implements Publisher, Subscriber {...}
class B implements Publisher, Subscriber {...}

如果您不介意使用某些JavaFX技术,那么您应该查看properties and binding,它将允许您使用类似于您已有的东西,但这次没有编译器错误