美文网首页
观察者模式

观察者模式

作者: 柚子过来 | 来源:发表于2018-02-05 19:29 被阅读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数据。

    相关文章

      网友评论

          本文标题:观察者模式

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