当前位置: 首页 > news >正文

[Java] 观察者模式简述

模式定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,他的所有依赖者都会收到通知并且更新
观察者模式简单设计
依照这个图,简单的写一个代码

package Section1.listener;import java.util.ArrayList;
import java.util.List;public class ObserverTest {public static void main(String[] args) {Suject suject = new Suject();//把观察者1,2塞到容器里面Task1 task1 = new Task1();Task2 task2 = new Task2();suject.addObserver(task1);suject.addObserver(task2);//对观察者下达一个 new task 通知String msg = "new task";suject.notifyObserver(msg);}
}class Suject{//容器List<Observer> container = new ArrayList<>();//addpublic void addObserver(Observer observer){container.add(observer);}//removepublic void removeObservce(Observer observer){container.remove(observer);}//通知public void notifyObserver(Object object){for (Observer item : container) {item.update(object);}}
}interface Observer{void update(Object object);
}//观察者1
class Task1 implements Observer{@Overridepublic void update(Object object) {System.out.println("Task1 get " + object);}
}//观察者2
class Task2 implements Observer{@Overridepublic void update(Object object) {System.out.println("Task2 get " + object);}
}

观察者模式的优点是:

  1. 符合开闭原则
  2. 可以在运行时建立对象之间的联系

应用:

  1. JDK
  2. java.util.Observable
  3. Spring

下面是Spring中的应用代码

//相当于上面案例的Observer
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {//相当于updatevoid onApplicationEvent(E var1);static <T> ApplicationListener<PayloadApplicationEvent<T>> forPayload(Consumer<T> consumer) {return (event) -> {consumer.accept(event.getPayload());};}
}

他的发布者是ApplicationEventMulticaster

http://www.lryc.cn/news/104312.html

相关文章:

  • linux驱动定时器实现按键按下打印字符
  • 反转链表(JS)
  • [PyTorch][chapter 45][RNN_2]
  • 基于canvas画布的实用类Fabric.js的使用
  • 基于SpringBoot+Vue驾校理论课模拟考试系统源码(自动化部署)
  • SpringBoot使用Redis对用户IP进行接口限流
  • MeterSphere学习篇
  • 大数据技术之Clickhouse---入门篇---数据类型、表引擎
  • 【微服务架构设计】微服务不是魔术:处理超时
  • 天下风云出我辈,AI准独角兽实在智能获评“十大数字经济风云企业
  • SpringBoot2学习笔记
  • 安达发|APS生产派单系统对数字化工厂有哪些影响和作用
  • 状态机的介绍和使用 | 京东物流技术团队
  • tinkerCAD案例:32. 使用对齐工具构建喷泉
  • 一起学数据结构(2)——线性表及线性表顺序实现
  • mqtt协议流程图
  • 7、单元测试--测试RestFul 接口
  • 国家留学基金委(CSC)|发布2024年创新型人才国际合作培养项目实施办法
  • 找好听的配乐、BGM就上这6个网站,免费商用。
  • 【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)
  • android Android Studio Giraffe | 2022.3.1 版本Lombok不兼容 解决方案
  • 前端框架学习-基础前后端分离
  • 数据中心电子电气设备常见的五种地线种类和做法
  • 重学C++系列之STL库
  • JAVA SE -- 第十四天
  • 微信小程序监测版本更新
  • 《Java面向对象程序设计》学习笔记——第 2 章 基本数据类型、数组和枚举类型
  • TDesign中后台管理系统-访问后端服务
  • 【机器学习】Gradient Descent for Logistic Regression
  • ElasticSearch基础篇-Java API操作