我有以下课程
public class A extends java.util.Observable {
private B property1;
private C property2;
int variable1;
/*Setters and getters**/
}
我创建了这个类Observable,以便我可以收到有关variable1的任何更改的通知。现在我想通知B类或C类属性中变量的变化。由于属性B和C的变量没有从A类中的setter方法改变,因此我无法在发生更改时通知Observer。
如果没有在观察者代码中明确注册类B和C,通知观察者的最佳方法是什么?我只想观察属于A类的所有属性。
答案 0 :(得分:1)
当Observable
状态发生变化时,请调用其中一种notifyObservers()
方法。它们可能不会被setter方法明确修改,但如果您正确encapsulated访问B
和C
个对象,那么您应该很高兴。
但是,听起来,我们允许B
和C
的引用继续存在于您的类A
对象之外。这样做的结果是您的系统现在依赖于类A
的实现,而不是它的接口。通过以下方式解决这个问题:
B
和C
,并且必须通过课程A
开展所有工作
B
和C
。B
和C
也展开Observable
,让他们在更改时更新A
。代码示例
public class A extends java.util.Observable {
private B property1;
private C property2;
int variable1;
public void doThatThingy() {
property1.doSomething();
notifyObservers();
}
}
public class B {
void doSomething() {
// Hey look at me, I'm doing something
}
}
public B getB() {
return property1;
}