zoukankan      html  css  js  c++  java
  • java设计模式----观测者模式

    目录

      1.介绍观测者模式

      2.jdk自带的观测者模式实现

      3.自己实现一个观测者模式

    一、介绍建观测模式

      观测者模式是一种比较重要的设计模式,观测者模式也叫发布/订阅模式。它在angular、vue、等前端框架中的使用是非常频繁的。观测者模式本身是一种mv模型,它能时时的更新我们的数据,观测者模式本身提供一种异步操作。

    二、jdk自带的观测者模式实现

      在jdk中有自带的类来实现观测者模式,在jdk1.9之后这个类宣布过时了,因为这个模式的实现相对简单。

      jdk中自带的观测者模式使用入下:

      1.创建一个能被观测的对象:

      这个对象需要继承Observable来声明是一个能被观测的对象

    package observer;
    
    import java.util.Observable;
    
    /**
     * 能被观测的对象
     * @author HYSong
     * 
     */
    public class Data extends Observable{
        int data;
        
        /**
         * @param data 要设置的 data
         */
        public void setData(int data) {
            this.data = data;
            //改变状态
            setChanged();
            //通知观测者
            notifyObservers(data);
        }
        
    }
    Data

      2.创建一个观测者的对象

      这个对象需要实现Observer接口来声明一个观测者,并重写update方法

    package observer;
    
    import java.util.Observable;
    import java.util.Observer;
    
    /**
     * 观测者
     * @author HYSong
     *
     */
    public class View implements Observer{
    
        @Override
        public void update(Observable o, Object arg) {
                    
                display((int)arg);
            
        }
        
        void display(int arg) {
            System.out.println("Data:"+arg);
        }
    }
    View

      如果一个被观测对象绑定了多个观测者的话,那么当改变了一个事件时,会被推送到多个观测者上,所有观测者的update方法都将被执行。

      如果一个观测者观测了多个被观测者的话,我们可以判断类型这个对象的类型是否为观测者的对象类型。这样就可以区分是来自哪个推送者的消息。

    package observer;
    
    import java.util.Observable;
    import java.util.Observer;
    
    /**
     * 观测者
     * @author HYSong
     *
     */
    public class View implements Observer{
    
        @Override
        public void update(Observable o, Object arg) {
            if(o instanceof Data) {
                display((int)arg);
            }
        }
        
        void display(int arg) {
            System.out.println("Data:"+arg);
        }
    }
    View Code

      

      

      

  • 相关阅读:
    Spark学习笔记2(spark所需环境配置
    Spark学习笔记1(初始spark
    zookeeper基本讲解及基本命令和配置 (转)
    计算机网络面试常考(转载)
    C++面试笔试题汇总
    复杂指针解析
    如何限制一个类对象只在栈(堆)上分配空间?
    虚函数实现机制
    C++内存分配方式详解
    C++中指针和引用的区别(转载)
  • 原文地址:https://www.cnblogs.com/bananafish/p/10385570.html
Copyright © 2011-2022 走看看