You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中不使用内置库实现自定义Observer模式?

手动实现Java观察者模式(不依赖内置库)

问题说明

需要实现一个简单的观察者系统,让观察者可以订阅主题,当主题状态变化时收到通知,且不能使用java.util.Observer或PropertyChangeSupport等内置类。现有代码已搭建基础结构,但缺少状态变化时的通知逻辑,无法触发观察者的更新行为。

修改后的完整代码

import java.util.ArrayList;
import java.util.List;

class Subject {
    private List<Observer> observers = new ArrayList<>();
    private String state;

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

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

    public void setState(String state) {
        this.state = state;
        // 遍历观察者列表,触发更新通知
        for (Observer observer : observers) {
            observer.update(state);
        }
    }

    public String getState() {
        return state;
    }
}

class Observer {
    private String name;

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

    public void update(String state) {
        System.out.println(name + ": " + state);
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        Subject subject = new Subject();
        
        Observer observer1 = new Observer("Observer 1");
        Observer observer2 = new Observer("Observer 2");
        
        subject.subscribe(observer1);
        subject.subscribe(observer2);
        
        // 修改主题状态,触发通知
        subject.setState("State Changed!");
    }
}

关键修改说明

  • 在Subject的setState方法中,新增遍历观察者列表的逻辑:使用增强for循环逐个调用观察者的update方法,并传入更新后的状态值,完成通知流程。
  • 添加Main测试类,演示完整流程:创建主题实例、创建两个观察者并订阅、修改主题状态,验证观察者是否收到通知。

运行结果

执行代码后将输出:

Observer 1: State Changed!
Observer 2: State Changed!

内容的提问来源于stack exchange,提问作者Sadeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:56:06