【发布时间】:2011-11-08 10:05:32
【问题描述】:
我正在尝试理解 Observer 和 Observable。
这是一个我想弄清楚的例子:
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?为什么我要更新另一个 observable?我为什么还需要这个观察者?
【问题讨论】:
-
这是少数模式之一,只有在您真正需要在现有项目中使用一种模式时才能最好地理解。
-
例如在 MVC 中。试试这个代码:emilmont.net/…
标签: java oop design-patterns observer-pattern