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

      

      

      

  • 相关阅读:
    mysql判断一个字符串是否包含某几个字符
    mysql动态sql 整理多个字段
    mysql 把表中某一列的内容合并为一行
    linux基础
    shell基础
    香港主机Squid+Stunnel代理搭建
    mysql字符串根据指定字符分割
    tomcat项目快速启动设置
    Linux系统内存占用90%以上——解决方法
    redis常用命令
  • 原文地址:https://www.cnblogs.com/bananafish/p/10385570.html
Copyright © 2011-2022 走看看