美文网首页
Java-设计模式-观察者模式

Java-设计模式-观察者模式

作者: lioilwin | 来源:发表于2017-08-27 16:49 被阅读8次

    一.介绍

    观察者模式Observer(又称为发布publish-订阅Subscribe模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种!
        
    完美将观察者和被观察对象分离,定义了对象间的一对多依赖关系,
    一个对象(被观察者)状态发生变化时, 所有对象(观察者)都得到通知并自动刷新! 
    例如UI可作为观察者, 业务数据是被观察者,数据发生变化, 通知UI更新。
    
    实现观察者模式时要注意,观察者和被观察对象之间互动关系不能体现成类之间直接调用,
    否则就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计原则。
    无论是观察者“观察”观察对象,还是被观察者将自己的改变“通知”观察者,都不应该直接调用!
    
    面向对象设计一个原则:一个对象(类)只做一件事情,不管其它!
    观察者模式在模块之间划定了清晰界限,提高了应用程序的可维护性和重用性。
    

    二.使用

    java标准已经有:观察者接口Observer,被观察者抽象类Observable
    所以Java使用观察者模式很方便快捷!
    

    1.添加观察者(注册/订阅)

    
    void 添加观察者(){
        Observable o = new 被观察者();
        o.addObserver(new 观察者A());
        o.addObserver(new 观察者B());
    }
    
    

    2.观察者

    
    public class 观察者A implements Observer {
        // 被观察者改变了,通知观察者A
        @Override
        public void update(Observable o, Object arg) {
        }
    }
    
    public class 观察者B implements Observer {
        // 被观察者改变了,通知观察者B
        @Override
        public void update(Observable o, Object arg) {
        }
    }
    
    

    3.被观察者

    
    public class 被观察者 extends Observable {
        // Observable.addObserver()添加观察者,保存了所有观察者
        
        void 被观察者改变了(){     
            setChanged();
            // 循环遍历所有观察者对象,调用update(...),通知所有观察者        
            notifyObservers();
        }
    }
    
    

    简书: http://www.jianshu.com/p/1e4bf0b7f744
    CSDN博客: http://blog.csdn.net/qq_32115439/article/details/72792614
    GitHub博客:http://lioil.win/2017/05/28/Observer_Pattern.html
    Coding博客:http://c.lioil.win/2017/02/28/Observer_Pattern.html

    相关文章

      网友评论

          本文标题:Java-设计模式-观察者模式

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