用Java可以观察到
问题内容:
我正在尝试了解观察者和可观察者。
这是我要弄清楚的一个示例:
public class IntegerDataBag extends Observable implements Iterable<Integer> {
private ArrayList<Integer> list= new ArrayList<Integer>();
public void add(Integer i){
list.add(i);
setChanged();
notifyObservers();
}
public Iterator<Integer> iterator(){
return list.iterator();
}
public Integer remove (int index){
if (index< list.size()){
Integer i = list.remove(index);
setChanged();
notifyObservers();
return i;
}
return null;
}
}
public class IntegerAdder implements Observer {
private IntegerDataBag bag;
public IntegerAdder(IntegerDataBag bag) {
this.bag = bag;
bag.addObserver(this);
}
public void update(Observable o, Object arg) {
if (o == bag) {
System.out.println("The contents of the IntegerDataBag have changed");
}
}
}
-
该
bag.addObserver()
可制成只是因为IntegerDataBag
延伸Observable
? -
该观察者被添加到哪里?正在创建什么,在哪里创建?
-
setChanged()
和之间有什么区别notifyObservers()
? -
我不明白这种
update
方法。代表什么arg
?为什么需要检查o==bag
?为什么要更新另一个可观察的东西? -
无论如何我为什么需要这个观察者?
问题答案:
- 是。
addObserver
是Observable
抽象类中的方法。请参阅Java文档中的Observable。 - 它已添加到中的列表中
Observable
。 - 在设置
notifyObservers
之前,对的调用将无济于事setChanged
。 - 您可能在同一应用程序中有多个Observable。
Observer
是一种常见的设计模式。通常的示例是当您有一个模型和多个视图时。每个视图都是模型上的观察者;如果模型更改,则视图将更新。