观察者模式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

相关推荐
毅炼6 分钟前
Netty 常见问题总结
java·网络·数据结构·算法·哈希算法
Whisper_Sy7 分钟前
Flutter for OpenHarmony移动数据使用监管助手App实战 - 周报告实现
开发语言·javascript·网络·flutter·php
Anastasiozzzz9 分钟前
leetcodehot100--最小栈 MinStack
java·javascript·算法
Sylvia-girl13 分钟前
线程的死锁【了解】
java·开发语言·jvm
Elias不吃糖19 分钟前
java开发的三层架构
java·开发语言·架构
pp起床21 分钟前
【苍穹外卖】Day2.5 分类管理
java
lixin55655625 分钟前
基于神经网络的音乐生成增强器
java·人工智能·pytorch·python·深度学习·语言模型
养海绵宝宝的小蜗26 分钟前
Python第二次作业
开发语言·python
宫瑾42 分钟前
【C语言】嵌入式C加强学习
java·c语言·学习
结衣结衣.1 小时前
protobuf介绍与快速上手
java·服务器·html