一尘不染

什么时候应该使用Observer和Observable?

java

什么是Observer,什么Observable时候应该使用它们?

我并不了解这些术语,因此当我回到家并开始使用Google Observer和Google搜索时Observable,发现了来自不同资源的一些观点:

1)Observable是一个类,Observer是一个接口。

2)Observable该类维护一个Observers 列表。

3)当一个Observable对象被更新时,它调用其update()每个的方法Observer来通知它已被更改。

我发现这个例子:

import java.util.Observable;
import java.util.Observer;

class MessageBoard extends Observable
{
    public void changeMessage(String message) 
    {
        setChanged();
        notifyObservers(message);
    }
}

class Student implements Observer 
{
    @Override
    public void update(Observable o, Object arg) 
    {
        System.out.println("Message board changed: " + arg);
    }
}

public class MessageBoardTest 
{
    public static void main(String[] args) 
    {
        MessageBoard board = new MessageBoard();
        Student bob = new Student();
        Student joe = new Student();
        board.addObserver(bob);
        board.addObserver(joe);
        board.changeMessage("More Homework!");
    }
}

但是我不明白为什么我们需要ObserverObservable?的用途setChanged()notifyObservers(message)方法是什么?


阅读 430

收藏
2020-03-21

共1个答案

一尘不染

有一个学生和一个留言板的具体示例。学生将自己添加到希望在新消息发布到MessageBoard时得到通知的观察者列表中进行注册。将消息添加到MessageBoard时,它将遍历其Observers列表,并通知他们事件已发生。

想想Twitter。当你说要关注某人时,Twitter会将你添加到其关注者列表中。当他们发送新推文时,你会在输入中看到它。在这种情况下,你的Twitter帐户是观察者,而你关注的人是观察者。

这个类比可能并不完美,因为Twitter更可能是调解人。但这说明了这一点。

2020-03-21