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

观察者模式示例代码

观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。常见于消息队列(MQ)、Zookeeper 事件通知等场景。

import java.util.ArrayList;
import java.util.List;

// 主题接口
interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

// 具体主题类
class NewsAgency implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String news;

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(news);
        }
    }

    public void setNews(String news) {
        this.news = news;
        notifyObservers();
    }
}

// 观察者接口
interface Observer {
    void update(String news);
}

// 具体观察者类
class NewsChannel implements Observer {
    private String news;

    @Override
    public void update(String news) {
        this.news = news;
        System.out.println("Received news: " + news);
    }
}

相关文章:

  • 【大模型】数据集构造方式
  • VMware17Pro虚拟机安装macOS教程(超详细)
  • 在高流量下保持WordPress网站的稳定和高效运行
  • 前端笔试面试资源汇总
  • 基于java新闻管理系统,推荐一款开源cms内容管理系统ruoyi-fast-cms
  • 图解MySQL【日志】——Buffer Pool
  • 算法日记19:SC71多元最短路(Floyd)
  • 什么事SSE SSE vs websocket
  • 【deepseek-r1模型】linux部署deepseek
  • 【Elasticsearch】搜索时分片路由
  • ollama-chat-ui-vue,一个可以用vue对接ollama的开源项目,可接入deepSeek
  • Chatgpt论文润色指令整理
  • LeetCode 0624.数组列表中的最大距离:只关心最小最大值
  • el-table 结合 slot 具名插槽遍历封装列表模板
  • jenkins自动发版vue前端笔记
  • JSON格式,C语言自己实现,以及直接调用库函数(一)
  • HTTP、HTTPS区别可靠性及POST为什么比GET安全的探讨
  • 结构风荷载理论与Matlab计算
  • Linux后台启动命令nohup并且MobaXterm后台启动断网也不关闭软件
  • 《探秘DeepSeek优化器:解锁模型训练的高效密码》
  • 国际著名学者Charles M. Lieber全职受聘清华深圳国际研究生院
  • 李强签署国务院令,公布修订后的《中华人民共和国植物新品种保护条例》
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛将焕新登场
  • 医学统计专家童新元逝世,终年61岁
  • 专访|首夺天元头衔创生涯历史,王星昊打算一步一步慢慢来
  • 我国将开展市场准入壁垒清理整治行动