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)</t>)。
定义 Subject 接口
约定注册、移除和通知观察者的标准行为:
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>
实现具体 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 代码,符合开闭原则。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











