java - 我们什么时候应该使用 Observer 和 Observable?

标签 java design-patterns observable observer-pattern observers

一位面试官问我:

什么是ObserverObservable,我们应该在什么时候使用它们?

我不知道这些术语,所以当我回到家开始谷歌搜索 ObserverObservable 时,我从不同的资源中找到了一些要点:

1) Observable is a class and Observer is an interface.

2) The Observable class maintains a list of Observers.

3) When an Observable object is updated, it invokes the update() method of each of its Observers to notify that, it is changed.

我找到了这个例子:

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

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

最佳答案

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

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

这个类比可能并不完美,因为 Twitter 更有可能是一个中介。但它说明了这一点。

关于java - 我们什么时候应该使用 Observer 和 Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744450/

相关文章:

c# - 工作单元模式——管理父子关系

java - Rx 将 Observable<List<T>> 转换为 Observable<T>

javascript - JavaScript 中的简单 Observable 2 路数据绑定(bind)

java - 如何在 Java 中比较字符串?

java - 更好的设计模式?

java-计时代码块的执行

c# - 创建松散耦合/可扩展的软件架构

javascript - JavaScript 代理是否应该拦截对底层对象(如 Object.Observe)的直接更改?

java - Spring mvc 3中ModelAndView类的功能

java - 使用 uberjar 中的 Jersey 和 Jackson 时不支持的媒体类型