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

用途:可用于拦截过滤器

消息推送接口:

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");
    }
}
相关推荐
稚辉君.MCA_P8_Java6 小时前
DeepSeek Java 多线程打印的12种实现方法
java·linux·后端·架构·maven
lsx2024066 小时前
Bootstrap5 折叠功能详解
开发语言
JienDa6 小时前
JienDa聊PHP:电商系统实战架构深度解析与优化策略
开发语言·架构·php
lingggggaaaa6 小时前
免杀对抗——C2远控篇&PowerShell&C#&对抗AV-EDR&停用AMSI接口&阻断ETW跟踪&调用
c语言·开发语言·c++·学习·安全·c#·免杀对抗
k***3886 小时前
Golang 构建学习
开发语言·学习·golang
zzzsde6 小时前
【C++】异常:概念及使用
开发语言·c++·算法
代码不停6 小时前
Java栈题目练习
java·开发语言
xxp43216 小时前
Qt 多线程
开发语言·qt
864记忆7 小时前
在IDEA中如何使用翻译插件?
java·ide·intellij-idea
w***48827 小时前
Springboot 3项目整合Knife4j接口文档(接口分组详细教程)
java·spring boot·后端