在Java中可以观察到 [英] Observable in Java

查看:87
本文介绍了在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;
}
返回null;
}

}

public class IntegerAdder implements Observer {

private IntegerDataBag bag;

public IntegerAdder(IntegerDataBag包){
this.bag = bag;
bag.addObserver(this);
}

public void update(Observable o,Object arg){
if(o == bag){
System.out.println( IntegerDataBag已更改);
}
}

}




  1. bag.addObserver()只能由于 IntegerDataBag 扩展可观察


  2. 这个观察者在哪里添加?什么是创建和在哪里?


  3. setChanged() notifyObservers()


  4. 我不明白更新方法; arg 代表什么?为什么我需要检查 o == bag ?为什么我会更新另一个可观察的?


  5. 为什么我还需要这个观察者?



解决方案


  1. 是的。 addObserver Observable 抽象类中的一种方法。请参阅Java文档中的可观察到的

  2. 它被添加到 Observable 中的列表中。

  3. 调用 notifyObservers 将不会执行任何操作,直到 setChanged 设置为止。 / li>
  4. 您可能在同一个应用程序中有多个Observables。

  5. 观察者是一种常见的设计模式。通常的例子是当你有一个模型和多个视图。每个视图都是模型的观察者;如果模型更改,则视图将被更新。


I'm trying to understand the Observer and the Observable.

Here's an example that I'm trying to figure out:

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. The bag.addObserver() can be made only because IntegerDataBag extends Observable?

  2. Where is this observer being add to? What is being created and where?

  3. What is the difference between setChanged() and notifyObservers()?

  4. I don't understand the update method; what does arg stand for? Why do I need to check that o==bag? Why would I update another observable?

  5. Why should I need this observer anyway?

解决方案

  1. Yes. addObserver is a method in the Observable abstract class. See Observable in the Java documentation.
  2. It is added to a list in Observable.
  3. A call to notifyObservers will do nothing until setChanged is set.
  4. You might have multiple Observables in the same application.
  5. Observer is a common design pattern. The usual example is when you have a Model and multiple Views. Each View is an Observer on the Model; if the Model changes, the Views get updated.

这篇关于在Java中可以观察到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆