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

相关推荐
潜创微科技27 分钟前
IT6520:USB‑C 转 MIPI 芯片方案 4K@120Hz 高清显示
c语言·开发语言
言之。1 小时前
【Python】免费的中文 AI 配音方案
开发语言·人工智能·python
天天进步20152 小时前
Python全栈项目:从零手操一个高性能 API 网关
开发语言·python
Java面试题总结2 小时前
java高频面试题(2026最新)
java·开发语言·jvm·数据库·spring·缓存
苦逼的猿宝2 小时前
学生心理咨询评估系统
java·毕业设计·springboot·计算机毕业设计
隔窗听雨眠2 小时前
doctype、charset、meta如何控制整个渲染流水线
java·服务器·前端
安生生申3 小时前
使用pygame实现2048
开发语言·python·pygame
hh.h.3 小时前
CANN算子开发入门:从零开始写第一个Ascend C算子
c语言·开发语言·cann·c算子
西安邮电大学3 小时前
SpringBean完整生命周期
java·spring
刀法如飞4 小时前
DDD 与 Ontology 对比分析:哪一种更适合AI时代复杂系统构建?
java·架构·领域驱动设计