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

  

  

  

原文地址:https://www.cnblogs.com/bananafish/p/10385570.html