zoukankan      html  css  js  c++  java
  • 观察者模式

    • 定义

    观察者模式定义了对象之间的一对多依赖,当一个对象改变时。所以依赖于它的对象都会得到通知。

    • 演示样例
    interface Observer {
        void update(int data);
    }
    
    class NewsPaper {
        private LinkedList<Observer> observers;
    
        public NewsPaper() {
            observers = new LinkedList<>();
        }
    
        public void subscribe(Observer o) {
            observers.add(o);
        }
    
        public void unsubscribe(Observer o) {
            observers.remove(o);
        }
    
        public void changeData(int data) {
            for (Observer o : observers) {
                o.update(data);
            }
        }
    }
    
    class Reader implements Observer {
        private String name;
    
        public Reader(NewsPaper paper, String name) {
            this.name = name;
            paper.subscribe(this);
        }
    
        @Override
        public void update(int data) {
            System.out.println(name + " update data:" + data);
        }
    }
    
    public class TestObserve {
        public static void main(String[] args) {
            NewsPaper newsPaper = new NewsPaper();
            Reader tom = new Reader(newsPaper, "tom");
            Reader jack = new Reader(newsPaper, "jack");
            newsPaper.changeData(10);
            System.out.println("--");
            newsPaper.unsubscribe(tom);
            newsPaper.changeData(5);
        }
    }
    

    全部 Reader 都是观察者,当他订阅了 NewsPaper 后。NewsPaper 一有新数据,就会通知全部订阅了它的 Reader。

    • 为什么

    为什么要使用观察者模式?由于在初始化被观察者时,并不知道当数据变化时。须要通知谁。

    须要通知的对象是动态变化的。

    • 谁还用了观察者模式

    在 GUI 编程时。我们想要在事件被触发时,运行我们指定的动作。

    比如想在button被点击时弹窗体。就能够通过类似AddListener。将已经实现对应接口的对象加入到button的“订阅列表”中。当button被点击时,系统会依次调用“订阅列表”中对象的对应方法。弹窗体因此被触发。

  • 相关阅读:
    谷歌浏览器离线安装
    C语言restrict关键字的使用
    Win32编程中radiobutton的分组
    在SourceForge中建立开源项目
    [转载]Linux解压缩命令
    [转载]vim配置文件
    解决VC6在win7下打开文件崩溃问题
    gson解析复杂的json数据
    catch中return语句的执行时间
    踏出了学习clojure的第一步
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6882117.html
Copyright © 2011-2022 走看看