观察者模式Java示例代码

复制代码
import java.util.ArrayList;
import java.util.List;

// 观察者接口
interface Observer {
    void update(String message);
}

// 具体观察者
class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received message: " + message);
    }
}

// 被观察者
class Subject {
    private List<Observer> observers = new ArrayList<>();

    public void register(Observer observer) {
        observers.add(observer);
    }

    public void unregister(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}
// 使用示例
public class Main {
    public static void main(String[] args) {
        Subject subject = new Subject();

        // 创建观察者
        Observer observer1 = new ConcreteObserver("Observer1");
        Observer observer2 = new ConcreteObserver("Observer2");

        // 注册观察者
        subject.register(observer1);
        subject.register(observer2);

        // 发送通知
        subject.notifyObservers("Hello, Observers!");
    }
}

Subject是被观察的对象,Observer是观察者。当Subject的状态发生改变时,它会通知所有注册的Observer

相关推荐
程序猿乐锅4 分钟前
【苍穹外卖|Day01】项目初识:从多模块结构到 OpenAPI 接口文档踩坑
java·spring·maven·mybatis
我不是懒洋洋4 分钟前
【C++】内存管理与模板(C++内存管理方式、new和delete的实现原理、malloc/free和new/delete的区别、函数模板、类模板)
c语言·开发语言·c++·青少年编程·visual studio
雪的季节5 分钟前
Qt多窗口架构设计需求简介
开发语言·qt
李白的天不白6 分钟前
针对你遇到的 Client.Timeout exceeded 问题,我判断是防火墙拦截了 HTTPS 流量
java
linweidong10 分钟前
Java 后端开发面试 50 个高频易混淆知识点详解
java·spring boot·spring·spring cloud·面试·mybatis·spring事务
码语智行10 分钟前
应用启动和关闭监听器功能分析
java·spring boot
z2005093010 分钟前
【linux学习】深入理解 Linux 下的静态库与动态库
开发语言·c++·算法
Resky081811 分钟前
什么是 Spring IOC:倒过来让容器帮你 new,而不是你到处 new
java·spring
AutumnWind042011 分钟前
【JDK动态代理源码梳理】
java·后端·spring
韦胖漫谈IT12 分钟前
面向对象 vs 函数式背后的思维差异
开发语言