观察者模式

2018-02-05  本文已影响0人  柚子过来

作用:在对象之间定义一对多依赖,当一个对象改变时,其他依赖的对象会接收到通知并自动更新。

OO原则:

封装变化
组合优于继承
针对接口编程优于针对实现编程
松耦合设计



Example:
在Java中有内置的观察者模式,主题对象继承java.util.Observable,观察者实现java.util.Observer。但是可以发现内置的观察者模式有个问题:Observable是类而不是接口。所以使用观察者模式时可以考虑自己实现,毕竟实现起来也比较简单。需要定义的接口及方法与内置的类似。

public class Observable {
    public class Observable {
private boolean changed = false;
private Vector<Observer> obs;

public Observable() {
    obs = new Vector<>();
}
public synchronized void addObserver(Observer o) {  ... ... }
public synchronized void deleteObserver(Observer o) { ... ... }
public void notifyObservers(Object arg) {... ...}
... ...
}


 public interface Observer {
   void update(Observable o, Object arg);
}

另外,观察者获取消息的方式可以有两种:主题对象主动推送或者观察者自己拉取。像zookeeper的watcher机制和kafka的消息订阅模式都属于观察者模式,前者属于发生change时服务器主动推送通知watcher,后者属于Consumer主动从topic中poll数据。

上一篇 下一篇

猜你喜欢

热点阅读