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

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

一、需要的类

一个发布类:里面一个是别人需要订阅的属性,以及用于存储订阅者的list,attach方法是往list集合里面添加元素,notifyObservers通知方法,也就是循环调用订阅者里面的一个方法,这个notifyObservers在set属性的时候调用
一个订阅者抽象类:发布者notifyObservers里面调用的那个方法,外加一个订阅者用于获取里面的内容
N个订阅者:在构造器中将自己注册到发布者集合中,外加一个接口实现内容

二、实现代码

发布类

public class Subject {private String state;private List<Observer> observers = new ArrayList<Observer>();public void attach(Observer observer){observers.add(observer);}public void notifyObservers(){for (Observer observer : observers){observer.update();}}public void setState(String state){this.state = state;notifyObservers();}public String getState(){return state;}
}

订阅抽象类

public abstract class Observer {public Subject subject;public abstract void update();
}

订阅实现类1

public class BinaryObserver extends Observer{public BinaryObserver(Subject subject){this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println("Binary String: " + this.subject.getState());}
}

订阅实现类2

public class OctalObserver extends Observer{public OctalObserver(Subject subject) {this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println("Octal String: " + subject.getState());}
}

调用类

@SpringBootApplication
public class ObserverApplication {public static void main(String[] args) {Subject subject = new Subject();new BinaryObserver(subject);new OctalObserver(subject);subject.setState("10");subject.setState("20");}
}

三、结果

在这里插入图片描述

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

相关文章:

  • UE5 - 制作《塞尔达传说》中林克的技能 - 17 - 遥控炸弹(二)
  • 键盘第一下无反应
  • 基于Spring Boot的绿园社区团购系统的设计与实现
  • 磁悬浮轴承位移信号的高精度估计:卡尔曼滤波算法深度解析
  • MySQL复杂SQL性能优化实战:多表联查与子查询的高效方法
  • 【数据清洗与预处理】-文本采集与处理
  • LoRA 问答微调与部署全流程:基于 LLaMA-Factory + DeepSeek + FastAPI 打造专属大模型
  • Hive SQL 实战:电商销售数据分析全流程案例
  • 大数据轻量化流批一体架构探索实践(一)
  • 【数据分析】环境数据降维与聚类分析教程:从PCA到可视化
  • [特殊字符]【联邦学习实战】用 PyTorch 从 0 搭建一个最简单的联邦学习系统(含完整代码)
  • ubuntu下免sudo执行docker
  • spring-ai-alibaba官方 Playground 示例
  • 根据OS自动加载不同的native库和本地jar包
  • Ollama 深度使用指南:在本地玩转大型语言模型
  • 关于Spring的那点事(1)
  • AIGC检测系统升级后的AI内容识别机制与系统性降重策略研究(三阶段降重法)
  • 04_MySQL 通过 Docker 在同一个服务器上搭建主从集群(一主一从)
  • Junit_注解_枚举
  • 【区块链安全】代理合约中的漏洞
  • 【C++指南】C++ list容器完全解读(三):list迭代器的实现与优化
  • 【软考高项论文】论信息系统项目的成本管理
  • 渗透测试的重要性及最佳实践
  • 对selenium进行浏览器和驱动进行配置Windows | Linux
  • 调试W5500(作为服务器)
  • 淘宝API接口在数据分析中的应用
  • 非常详细版: dd.device.geolocation 钉钉微应用获取定位,移动端 PC端都操作,Vue实现钉钉微应用获取精准定位并渲染在地图组件上
  • 如何解决 Rider 编译输出乱码
  • leetcode:693. 交替位二进制数(数学相关算法题,python3解法)
  • Deepoc 大模型:无人机行业的智能变革引擎