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

用途:可用于拦截过滤器

消息推送接口:

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

消息推送实现着:

java 复制代码
​
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);
        }
    }
}

​

订阅者接口

java 复制代码
public interface Observer {
    void update(String message);

}

订阅者1

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

订阅者2

java 复制代码
public class ObserverTwo implements Observer{
    @Override
    public void update(String message) {
        System.out.println("ObserverTwo"+message);
    }
}

测试:

java 复制代码
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");
    }
}
相关推荐
oak隔壁找我13 分钟前
Spring AI 入门教程,使用Ollama本地模型集成,实现对话记忆功能。
java·人工智能·后端
懒羊羊不懒@14 分钟前
JavaSe—Stream流☆
java·开发语言·数据结构
郝开15 分钟前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
Js_cold28 分钟前
(* clock_buffer_type=“NONE“ *)
开发语言·fpga开发·verilog·vivado·buffer·clock
Homeey36 分钟前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
ANGLAL38 分钟前
27.短链系统
java
周杰伦_Jay41 分钟前
【Go微服务框架深度对比】Kratos、Go-Zero、Go-Micro、GoFrame、Sponge五大框架
开发语言·微服务·golang
杰瑞哥哥1 小时前
标准 Python 项目结构
开发语言·python
shykevin1 小时前
Rust入门
开发语言·后端·rust
QT 小鲜肉1 小时前
【个人成长笔记】将Try Ubuntu里面配置好的文件系统克隆在U盘上(创建一个带有持久化功能的Ubuntu Live USB系统)
linux·开发语言·数据库·笔记·ubuntu