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

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

一、需要的类

一个发布类:里面一个是别人需要订阅的属性,以及用于存储订阅者的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.xdnf.cn/news/14725.html

相关文章:

  • 如何让宿主机完全看不到Wi-Fi?虚拟机独立联网隐匿上网实战!
  • 百度文心大模型4.5系列正式开源,开源会给百度带来什么?
  • 华为云Flexus+DeepSeek征文 | ​​华为云ModelArts Studio大模型与企业AI会议纪要场景的对接方案
  • 深度学习04 卷积神经网络CNN
  • Spring 依赖注入:官方推荐方式及最佳实践
  • 2025年6月个人工作生活总结
  • 论文中用matplotlib画的图,如何保持大小一致。
  • 【智能体系统AgentOS】核心十:A2A工具
  • 2025 湖南大学程序设计竞赛(补题)
  • 跨主机用 Docker Compose 部署 PostgreSQL + PostGIS 主从
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set
  • [JS逆向] 喜马拉雅登录案例
  • [面试] js手写题-树转数组
  • Objective-c把字符解析成字典
  • C语言常用转换函数实现原理
  • Docker 入门教程(九):容器网络与通信机制
  • React-Find 一款能快速在网页定位到源码的工具,支持React19.x/next 15
  • 【AI时代速通QT】第四节:Windows下Qt Creator调试指南
  • 【c/c++3】类和对象,vector容器,类继承和多态,systemd,stdboost
  • 「Java案例」输出24个希腊字母
  • 双指针的用法
  • Vue 3 Teleport 特性
  • 人工智能之数学基础:如何判断正定矩阵和负定矩阵?
  • 矩阵的逆 线性代数
  • LRU缓存设计与实现详解
  • Spring Cloud:服务监控与追踪的高级实践
  • C# 合并两个byte数组的几种方法
  • 零基础学习RabbitMQ(5)--工作模式(1)
  • C/C++数据结构之动态数组
  • ali PaddleNLP docker