粉粉蕉的笔记本粉粉蕉的笔记本
  • JAVA

    • 代码笔记
    • Java8实战
    • 分布式事务实战(Seata)
    • 模板引擎(FreeMarker)
    • SpringSecurity
  • PYTHON

    • 概述
    • python3
    • python3(菜鸟教程)
    • pandas
    • numpy
    • matplotlib
  • 中间件

    • Kafka
    • RocketMQ
    • Redis
    • MongoDB
    • Elastic Search
  • 数据库

    • Mysql
  • 设计模式
  • 运维

    • linux命令速查
    • windows命令速查
    • Docker笔记
    • kubernetes学习笔记
    • kubernetes实操笔记
    • 运维工具大全
    • git操作宝典
  • 大数据

    • 概览
    • Hadoop
    • Hive
  • 机器学习

    • 机器学习概览
  • 概率论
  • 线性代数
  • 统计学
  • 金融知识学习
  • 聚宽
  • 因子分析
  • RSS
  • 资源导航
  • 医保
  • 健身

    • 笔记
    • 训练计划
  • 装修攻略
  • 读书笔记

    • 《深度学习》
我也想搭建这样的博客!
🚋开往
  • JAVA

    • 代码笔记
    • Java8实战
    • 分布式事务实战(Seata)
    • 模板引擎(FreeMarker)
    • SpringSecurity
  • PYTHON

    • 概述
    • python3
    • python3(菜鸟教程)
    • pandas
    • numpy
    • matplotlib
  • 中间件

    • Kafka
    • RocketMQ
    • Redis
    • MongoDB
    • Elastic Search
  • 数据库

    • Mysql
  • 设计模式
  • 运维

    • linux命令速查
    • windows命令速查
    • Docker笔记
    • kubernetes学习笔记
    • kubernetes实操笔记
    • 运维工具大全
    • git操作宝典
  • 大数据

    • 概览
    • Hadoop
    • Hive
  • 机器学习

    • 机器学习概览
  • 概率论
  • 线性代数
  • 统计学
  • 金融知识学习
  • 聚宽
  • 因子分析
  • RSS
  • 资源导航
  • 医保
  • 健身

    • 笔记
    • 训练计划
  • 装修攻略
  • 读书笔记

    • 《深度学习》
我也想搭建这样的博客!
🚋开往
  • 设计模式

  • 创建型

    • 工厂模式
    • 单例模式
    • 建造者模式
    • 原型模式
  • 结构型

    • 适配器模式
    • 装饰模式
    • 代理模式
    • 外观模式
    • 桥接模式
    • 组合模式
  • 行为型

    • 享元模式
    • 策略模式
    • 模板方法模式
    • 观察者模式
    • 迭代子模式
    • 责任链模式
    • 命令模式
    • 备忘录模式
    • 状态模式
    • 访问者模式
    • 中介者模式
    • 解释器模式

观察者模式

描述

场景:
当某个事件发生后,一些类需要对该事件进行响应(我们称为观察者)。

public class Client{
  public void func(){
    //...
    
    //事件发生
    if(event.success){
        //观察者类对事件进行响应
        classA.responseEvent();
        classB.responseEvent();
        //...
    }
  }
}

这样写会非常麻烦,若事件在其他代码里面也会发生,那么当需要增删观察者时,就要改很多地方。此时,观察者模式发挥作用。

代码实现示例

我们可定义一个“观察者注册中心”类,维护观察者列表;当事件发生后,由该注册中心统一通知观察者去响应。

/**观察者注册中心**/
public class MyObservable extends Observable{

    List<Observer> list;
    boolean isChange;
    
    /**添加观察者**/
    void addObserver(Observer o){

    }
    
    /**通知观察者**/
    void notifyObservers(Object arg){
    
    }
    
    /**设置修改标志,当标志改变时,才通知观察者**/
    void setChange(){
    }
}

/**观察者**/
public class MyObserver extends Observer{
  void update(Observable o,Object arg){
    //...
  }
}

其中,Observable和Observer都是JAVA提供的观察者模式的API。

实际应用场景

FAQ

Last Updated: 10/11/23, 6:07 AM
Contributors: dongyz8
Prev
模板方法模式
Next
迭代子模式