java - 具有多个可观察值的单个观察者

标签 java oop design-patterns observable

我想知道观察者设计模式的实现是什么。就像通常我们在 Observable 中维护一个观察者列表一样,从它的通知中我们调用观察者的更新方法。

现在这种情况下的设计是什么?我应该在观察者中维护一个可观察的列表吗?但是在更新方法中我如何知道哪个可观察对象调用了该观察者的更新。

请分享您对此的想法。

谢谢

最佳答案

通常,可观察对象持有对观察者的引用。在你的情况下,这可能是一个列表。无论如何,更新的第一个参数是可观察的。

所以这是一种方法:

import java.util.Observable;
import java.util.Observer;
enum Observables {
    o1,o2
}
class MyObservable extends Observable {
    public MyObservable(Observables observables) {
        this.observables=observables;
    }
    public void setChangedAndNotify(Object object) {
        setChanged();
        notifyObservers(object);
    }
    final Observables observables;
}
class MyObserver implements Observer {
    @Override public void update(Observable o,Object arg) {
        switch(((MyObservable)o).observables) {
            case o1:
                System.out.println(((MyObservable)o).observables);
                break;
            case o2:
                System.out.println(((MyObservable)o).observables);
                break;
        }
    }
}
class so56200126_single_observer_with_multiple_observable {
    public static void main(String[] args) throws InterruptedException {
        MyObservable myObservable1=new MyObservable(Observables.o1);
        MyObservable myObservable2=new MyObservable(Observables.o2);
        MyObserver myObserver=new MyObserver();
        myObservable1.addObserver(myObserver);
        myObservable2.addObserver(myObserver);
        myObservable1.setChangedAndNotify(null);
        myObservable2.setChangedAndNotify(null);
        Thread.sleep(1);
    }
}

关于java - 具有多个可观察值的单个观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56200126/

相关文章:

Javascript 模块和设计模式

java - Android 的最佳设计实践与 Java 不同?

java - 为什么Hibernate STRING无法解析?

java - 如何使用带有多个搜索词的 appengine 搜索 api 进行搜索?

c# - 将派生类转换为 C# 中的另一个派生类

java - OSGI 中的可靠原则

java - 我不知道如何在不禁用建议代码弹出窗口的情况下禁用 Netbean 的代码完成

java - 在时间复杂度为 O(n) 和空间复杂度为 O(1) 的数组中查找重复元素的最有效算法是什么?

javascript - 无法使用 "this"定义方法

c - 可能会失败的分配和操作顺序的正确模式