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

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

用途:可用于拦截过滤器

消息推送接口:

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<>();


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

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

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

​

订阅者接口

public interface Observer {
    void update(String message);

}

订阅者1

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

订阅者2

public class ObserverTwo implements Observer{
    @Override
    public 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");
    }
}


http://www.kler.cn/news/317995.html

相关文章:

  • Moshi: a speech-text foundation model for real time dialogue
  • 828华为云征文 | 解锁企业级邮件服务,在华为云Flexus x实例上部署Mailcow开源方案
  • ONNX模型部署利器ONNXRUNTIME框架
  • 算法-Init
  • [sniffer]分析
  • Excel 冻结多行多列
  • Python机器学习基础(NumPy、Pandas、Matplotlib)
  • 【CPP11?】结合CPP发展历史来理解CPP11
  • 代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
  • 【MySQL内置数据库】information_schema
  • 【C++】检测TCP链接超时——时间轮组件设计
  • 自学前端的正确姿势是...
  • 第17周 第2章Session与ServletContext原理 ---ServletContext与三大作用域对象
  • PerparedStatement概述
  • Qt 模型视图(三):视图类QAbstractItemView
  • Python常见Json对比库deepdiff、json_tools、jsonpatch
  • 【Python】curl命令、Api POST导入cURL、python直接使用cURL
  • OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核通信机制】下
  • 球体检测系统源码分享
  • Rust的作用?
  • tar.gz 文件压缩与解压shell实现
  • 付费电表系统的通用功能和应用过程参考模型(下)
  • 鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)天气应用案例
  • R语言NHANES数据分析(2)
  • Angular面试题五
  • LeetCode_sql_day30(1264.页面推荐)
  • 蓝桥等考C++组-2022-11-27-八级
  • 【C++】C++中如何处理多返回值
  • Vue|插件
  • oracle avg、count、max、min、sum、having、any、all、nvl的用法