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

观察者模式(发布-订阅模式)

用途:

(1)可用于拦截过滤器

(2)订单创建成功后的一些后续逻辑(消息提醒,订单打印,物品打包等)

(3)需要由统一调度中心调度的一系列任务等

消息推送接口:

public interface Subject {//添加订阅者void addObserver(Observer observer);//移除订阅者void removeObserver(Observer observer);//通知订阅者void notifyObservers(String message);
}

消息推送实现着:

​
public class ConcreteSubject implements Subject{//订阅者集合ArrayList<Observer> observers = new ArrayList<>();@Overridepublic void addObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers(String message) {for (Observer observer : observers) {observer.update(message);}}
}​

订阅者接口

public interface Observer {void update(String message);}

订阅者1

public class ObserverOne implements Observer{@Overridepublic void update(String message) {System.out.println("ObserverOne"+message);}
}

订阅者2

public class ObserverTwo implements Observer{@Overridepublic void update(String message) {System.out.println("ObserverTwo"+message);}
}

测试:

public class Tes {public static void main(String[] args) {ConcreteSubject concreteSubject = new ConcreteSubject();concreteSubject.addObserver(new ObserverOne());concreteSubject.addObserver(new ObserverTwo());concreteSubject.notifyObservers("hello world");}
}

相关文章:

  • RTMP、RTSP直播播放器的低延迟设计探讨
  • 搬砖6、Python函数和模块的使用
  • python股票因子,交易所服务器宕机,量化交易程序怎么应对
  • 【分布式微服务云原生】8分钟掌握微服务通信的艺术:Dubbo与OpenFeign全面解析
  • 56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
  • 内部类基础
  • 08-Registry搭建docker私仓
  • Eureka注册中心如何实现集群
  • Python/大数据/机器识别毕业设计选题题目推荐
  • Java研学-BootStrapTable插件
  • 监控和日志管理:深入了解Nagios、Zabbix和Prometheus
  • 【CSS】盒子模型
  • Vue 之组件插槽Slot用法(组件间通信一种方式)
  • 基于NXP LS1046+FPGA的轨道交通3U CPCI多网口解决方案,支持QNX/VXWOKRS/LINUX
  • ERP系统委外工单管理
  • 时间复杂度分析经典问题——最大子序列和
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android系统模拟器绘制实现概述
  • CentOS6 编译安装 redis-3.2.3
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • es6--symbol
  • Git同步原始仓库到Fork仓库中
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • React 快速上手 - 07 前端路由 react-router
  • 程序员最讨厌的9句话,你可有补充?
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 工作手记之html2canvas使用概述
  • 记一次和乔布斯合作最难忘的经历
  • 老板让我十分钟上手nx-admin
  • 前端之React实战:创建跨平台的项目架构
  • 通信类
  • 微服务入门【系列视频课程】
  • 详解NodeJs流之一
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 译自由幺半群
  • ionic异常记录
  • ​linux启动进程的方式
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #1015 : KMP算法
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (4)Elastix图像配准:3D图像
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (办公)springboot配置aop处理请求.
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (简单) HDU 2612 Find a way,BFS。
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (五)MySQL的备份及恢复
  • (转)一些感悟
  • . NET自动找可写目录
  • .NET Core 2.1路线图
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .net framework 4.8 开发windows系统服务
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 中viewstate的原理和使用