Java中用接口实现观察者模式的核心是定义Observer和Subject接口解耦通知逻辑:Observer声明update()方法,Subject约定add/remove/notify操作,具体类实现接口并维护观察者列表与通知机制,符合开闭原则。

Java 中用接口实现观察者模式,核心是定义 观察者(Observer) 和 被观察者(Subject) 的契约,通过接口解耦通知逻辑,不依赖具体实现。
定义 Observer 接口
声明统一的更新方法,所有观察者都必须实现它:
public interface Observer {
void update(String state); // 或传入事件对象、被观察者引用等
}
说明:参数可按需设计——比如传 Object source(被观察者)、Event event(自定义事件),或使用泛型增强类型安全(如 <T> void update(T data))。
定义 Subject 接口
约定注册、移除和通知观察者的标准行为:
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
public interface Subject {
void addObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String state); // 或 void notifyObservers()
}
说明:接口只管“做什么”,不管“怎么做”。实际维护观察者列表、触发通知等逻辑由实现类完成。
实现具体 Subject(如 WeatherStation)
实现接口,并在状态变更时调用 notifyObservers():
import java.util.ArrayList;
import java.util.List;
public class WeatherStation implements Subject {
private List<Observer> observers = new ArrayList<>();
private String weather;
@Override
public void addObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(String state) {
for (Observer obs : observers) {
obs.update(state);
}
}
// 模拟状态变化并通知
public void setWeather(String weather) {
this.weather = weather;
notifyObservers(weather);
}
}
实现具体 Observer(如 DisplayBoard)
实现接口,定义收到通知后的响应行为:
public class DisplayBoard implements Observer {
@Override
public void update(String state) {
System.out.println("显示板收到更新:" + state);
}
}
使用示例:
public class Main {
public static void main(String[] args) {
WeatherStation station = new WeatherStation();
DisplayBoard board1 = new DisplayBoard();
DisplayBoard board2 = new DisplayBoard();
station.addObserver(board1);
station.addObserver(board2);
station.setWeather("晴天"); // 两个板子都会输出
station.setWeather("雷阵雨");
}
}
不复杂但容易忽略:接口让新增观察者(如手机 App、日志服务)只需实现 Observer,无需修改 WeatherStation 代码,符合开闭原则。

















