美文网首页我爱编程
Observer设计模式

Observer设计模式

作者: 淡淡的橙子 | 来源:发表于2018-04-16 19:59 被阅读0次

观察者设计模式(订阅/发布模式)是非常常见也是很有意思的一种设计模式,可以理解为是一种回调。

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
定义了一种一对多的依赖关系,当一个对象(被观察者Observable)的状态发生改变后,多个依赖对象(观察者Observer)被通知并自动发生变化。

观察者模式的类图:


Observer

观察者模式的关键是被观察者中具有一个属性,一般为List<Observer>,保存着当前的观察者,而每当被观察者的属性发生变化时,便会去通知观察者(同步或异步,调用观察者的update接口),所有观察者只要继承自Observer接口即可。

令人欣喜的是,如同迭代器设计模式一样,观察者模式实际也已经被继承在了JDK中。jdk中的java.util.Observer和java.util.Observable类中,我们在实现自己的观察者模式时,只要去继承相应的类即可。

以下的例子摘自wiki:
监控控制台用户的输入,当有输入时观察者进行相应,

import java.util.Observable;
import java.util.Scanner;

class EventSource extends Observable implements Runnable {
    public void run() {
        while (true) {
            String response = new Scanner(System.in).next();
            setChanged();
            notifyObservers(response);
        }
    }
}
import java.util.Observable;
import java.util.Observer;

public class MyApp {
    public static void main(String[] args) {
        System.out.println("Enter Text: ");
        EventSource eventSource = new EventSource();

        eventSource.addObserver(new Observer() {
            public void update(Observable obj, Object arg) {
                System.out.println("Received response: " + arg);
            }
        });

        new Thread(eventSource).start();
    }
}

相关文章

网友评论

    本文标题:Observer设计模式

    本文链接:https://www.haomeiwen.com/subject/puzekftx.html