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

用途:可用于拦截过滤器

消息推送接口:

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");
    }
}
相关推荐
阑梦清川3 分钟前
C++容器list底层迭代器的实现逻辑~list相关函数模拟实现
开发语言·c++·迭代器·stl
nihui1235 分钟前
Java面试篇基础部分-Java语言中的锁有哪些?
java·开发语言·面试
十五年专注C++开发13 分钟前
QT开发模式(一):界面和业务逻辑分离
开发语言·c++·qt
JOJO___15 分钟前
Spring MVC 参数校验 总结
java·spring·mvc
Flying_Fish_roe32 分钟前
MyBatis参数处理
java·tomcat·mybatis
flying jiang37 分钟前
Java提供了一个跨平台的换行符\n
java
懷淰メ1 小时前
PyQt5实现植物大战僵尸游戏 包含几十种植物、僵尸 欢迎体验!(附下载地址)
开发语言·python·qt·游戏·pyqt·植物大战僵尸·pvz
程序猿老樊1 小时前
async函数的多种使用形式
开发语言·前端·javascript
青年夏日科技工作者1 小时前
科大讯飞智能体Python SDK接入流程
开发语言·python
V+zmm101341 小时前
汽车保养系统小程序+ssm论文ppt源码调试讲解
java·小程序·毕业设计·mvc·ssm·课程设计