我有以下类(class)
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 方法更改,所以我无法在发生更改时通知观察者。
在不在观察者代码中显式注册类 B 和 C 的情况下通知观察者的最佳方式是什么?我只想观察属于 A 类的所有属性。
最佳答案
调用 notifyObservers()
之一Observable
的状态改变时的方法。它们可能不会被 setter 方法显式修改,但如果你有正确的 encapsulated访问您的 B
和 C
对象,然后您就可以开始了。
不过,在我看来,就像允许对 B
和 C
的引用继续存在于类 A
对象之外.这样做的结果是您的系统现在依赖于类 A
的实现,而不是它的接口(interface)。通过以下方式解决此问题:
- 首选 不允许系统的其余部分访问
B
和C
类,并且必须通过类来处理所有事情>一个
- Read more about the Law of Demeter关于为什么要这样做,而不是让其他类直接获取
B
和C
的引用。
- Read more about the Law of Demeter关于为什么要这样做,而不是让其他类直接获取
- Hack 让
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;
}
关于java - 如何观察可观察类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264366/