用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");
        }
    }

}
  1. bag.addObserver()可制成只是因为IntegerDataBag延伸Observable

  2. 该观察者被添加到哪里?正在创建什么,在哪里创建?

  3. setChanged()和之间有什么区别notifyObservers()

  4. 我不明白这种update方法。代表什么arg?为什么需要检查o==bag?为什么要更新另一个可观察的东西?

  5. 无论如何我为什么需要这个观察者?


问题答案:
  1. 是。addObserverObservable抽象类中的方法。请参阅Java文档中的Observable
  2. 它已添加到中的列表中Observable
  3. 在设置notifyObservers之前,对的调用将无济于事setChanged
  4. 您可能在同一应用程序中有多个Observable。
  5. Observer是一种常见的设计模式。通常的示例是当您有一个模型和多个视图时。每个视图都是模型上的观察者;如果模型更改,则视图将更新。