Fork me on GitHub

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
复制代码

 

  

  

  

 

posted @   Banana_Fish  阅读(287)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示