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

用途:可用于拦截过滤器

消息推送接口:

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");
    }
}
相关推荐
艾莉丝努力练剑7 分钟前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
邓不利东1 小时前
Spring中过滤器和拦截器的区别及具体实现
java·后端·spring
witton2 小时前
Go语言网络游戏服务器模块化编程
服务器·开发语言·游戏·golang·origin·模块化·耦合
草履虫建模2 小时前
Redis:高性能内存数据库与缓存利器
java·数据库·spring boot·redis·分布式·mysql·缓存
苹果醋32 小时前
Vue3组合式API应用:状态共享与逻辑复用最佳实践
java·运维·spring boot·mysql·nginx
枯萎穿心攻击2 小时前
ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
开发语言·unity·c#·游戏引擎
Jerry Lau2 小时前
go go go 出发咯 - go web开发入门系列(一) helloworld
开发语言·前端·golang
nananaij2 小时前
【Python基础入门 re模块实现正则表达式操作】
开发语言·python·正则表达式
Micro麦可乐2 小时前
Java常用加密算法详解与实战代码 - 附可直接运行的测试示例
java·开发语言·加密算法·aes加解密·rsa加解密·hash算法
掉鱼的猫2 小时前
Java MCP 鉴权设计与实现指南
java·openai·mcp