时间:2025-01-17 09:32
人气:
作者:admin
观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象间的一对多依赖关系,使得当一个对象状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。
主题(Subject):主题是被观察的对象,它维护一个观察者列表。当它的状态发生改变时,会通知所有的观察者。主题提供方法来注册、注销观察者。
观察者(Observer):观察者是依赖于主题的对象,它会在主题状态发生变化时收到通知,进而更新自身的状态。观察者有一个更新方法,当主题状态变化时,主题会调用此方法来通知观察者。
假设有一个温度监控系统:

用于观察温度变化的接口,订阅的主题发生变化时,通过观察者接口的update方法来通知订阅了的所有观察者。
interface Observer {
void update(int temperature);
}
// 观察者实现类1
class DisplayDevice implements Observer {
@Override
public void update(int temperature) {
System.out.println("显示装置:温度更新到" + temperature);
}
}
// 观察者实现类2
class AlarmSystem implements Observer {
@Override
public void update(int temperature) {
if (temperature > 42) {
System.out.println("警报:温度超过阈值!");
}
}
}
class TemperatureSensor {
// 观察者列表
private List<Observer> observers = new ArrayList<>();
private int temperature;
// 注册观察者
public void addObserver(Observer observer) {
observers.add(observer);
}
// 移除观察者
public void removeObserver(Observer observer) {
observers.remove(observer);
}
// 设置温度并通知观察者
public void setTemperature(int temperature) {
this.temperature = temperature;
notifyObservers();
}
// 通知所有观察者
private void notifyObservers() {
for (Observer observer : observers) {
observer.update(temperature);
}
}
}
public class ObserverPatternDemo {
public static void main(String[] args) {
// 创建主题和观察者
TemperatureSensor sensor = new TemperatureSensor();
Observer display = new DisplayDevice();
Observer alarm = new AlarmSystem();
// 注册观察者:如果没注册,那就不会通知
sensor.addObserver(display);
sensor.addObserver(alarm);
// 改变主题的状态
sensor.setTemperature(45);
sensor.setTemperature(28);
}
}
显示装置:温度更新到45
警报:温度超过阈值!
显示装置:温度更新到28
观察者模式是处理事件驱动系统或需要多个对象同步更新状态的常用模式,尤其在分布式系统、GUI框架中应用广泛。
Spring的事件机制ApplicationEvent是事件对象,ApplicationListener是事件监听器,当ApplicationEvent发布时,所有注册了该事件类型的ApplicationListener会被通知并处理该事件。ApplicationEventPublisher接口(通常是ApplicationContext的实现类)作为被观察者,ApplicationListener作为观察者。事件的发布和监听实现了松耦合的通知机制。
Java Web中的监听器,它通过监听和响应Web应用的生命周期事件、HTTP会话事件、请求事件以及属性变化事件。常见的监听器接口包括ServletContextListener、HttpSessionListener、ServletRequestListener等,实现相应的监听接口,即可完成相应事件的监听。监听器机制的使用可以帮助开发者在特定事件发生时执行一些处理逻辑,保证代码的解耦和灵活性。
观察者模式是一种行为设计模式,其核心在于通过定义一对多的依赖关系,使得当被观察者的状态发生变化时,所有依赖的观察者自动收到通知并更新,从而实现对象之间的松耦合和动态响应,同时便于观察者的扩展。

需要查看往期设计模式文章的,可以在个人主页中或者文章开头的集合中查看,可关注我,持续更新中。。。
上一篇:迭代器模式