MBZ*_*MBZ 5 java design-patterns observer-pattern
从技术上讲,似乎可以将a定义Class为两者Observable并Observer使用以下代码:
public class Data extends Observable implements Observer
Run Code Online (Sandbox Code Playgroud)
但是,试图实现它,它不起作用.
public class Data extends Observable implements Observer {
@Override
public void update(Observable o, Object o1) {
System.out.println("SC");
}
Integer A;
String B;
Float C;
public Data() {
this.addObserver(this);
}
public void setA(Integer A) {
this.A = A;
notifyObservers();
}
public void setB(String B) {
this.B = B;
notifyObservers();
}
public void setC(Float C) {
this.C = C;
notifyObservers(this.C);
}
}
Run Code Online (Sandbox Code Playgroud)
与main如下功能:
public static void main(String[] args) {
Data d = new Data();
d.setA(5);
d.setB("Hi");
d.setC(2.0f);
}
Run Code Online (Sandbox Code Playgroud)
它应该打印一些"SC",但它不起作用.谁能描述为什么?
如果不这样做.setChanged(),则.notifyObservers()无效.如果你有单独的类定义Observable和Observers,或者如果你有一个类,就像在你的例子中一样.
尝试更改您的setter,如下所示:
public void setC(Float C) {
this.C = C;
setChanged(); // <-- add this line
notifyObservers(this.C);
}
Run Code Online (Sandbox Code Playgroud)
从文档中Observable,
setChanged()将此Observable对象标记为已更改 ; 该hasChanged方法现在将返回true.
notifyObservers(Object arg)如果此对象已更改(如hasChanged方法所示),则通知其所有观察者,然后调用该clearChanged方法以指示此对象不再更改.