4

假设我有两个类:Awith property A.aBwith property B.b

一些属性A依赖于B.b,但A.a不依赖于B.b

一些属性B依赖于A.a,但B.b不依赖于A.a

我希望A收到更改的通知B.b,并B收到更改的通知A.a。如果我使用标准观察者模式:

public class A implements B.Observer {..}

public class B implements A.Observer {..}

我得到一个编译器错误:

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

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

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

4

1 回答 1

2

使用发布-订阅模式,其中每个类既是发布者又是订阅者。

interface Publisher {
    void addSubscriber(Subscriber sub);
}

interface Subscriber {
    void handle (Object event);
}

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

如果您不介意使用一些 JavaFX 技术,那么您应该查看属性和绑定,这将允许您获得类似于您已经拥有的东西,但这次没有编译器错误

于 2015-04-28T16:07:01.643 回答