如何在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
相关产品推荐
相关产品推荐

