假设我有两个类:A属性A.a,B属性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 {..}
我收到编译器错误:
cyclic inheritance involving B (or A).
我意识到这通常会导致无限循环,但在这种情况下它不会.例如,如果A.a更改,A将通知B.但由于A.a对B.b没有影响,因此没有返回A的通知且没有循环.
我很欣赏Java正试图阻止一般性问题,但我需要以某种方式实现它.有什么建议?
最佳答案 使用
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,这将允许您使用类似于您已有的东西,但这次没有编译器错误