观察者模式是行为型设计模式的核心成员,核心目标是定义对象间的一对多依赖关系,当一个对象状态变化时,所有依赖它的对象都会收到通知并自动更新。
一、观察者模式核心实现
核心特点
将被观察者(主题)与观察者解耦,主题维护观察者列表,状态变化时主动通知所有观察者,观察者实现统一接口接收通知并处理。
import java.util.ArrayList;
import java.util.List;
// 观察者接口
interface Observer { void update(String msg); }
// 具体观察者:用户
class User implements Observer {
private String name;
public User(String name) { this.name = name; }
@Override public void update(String msg) { System.out.println(name + "收到:" + msg); }
}
// 被观察者:公众号
class Subject {
private List<Observer> list = new ArrayList<>();
public void add(Observer o) { list.add(o); }
public void notify(String msg) {
for (Observer o : list) o.update(msg);
}
}
// 测试
public class ObserverTest {
public static void main(String[] args) {
Subject subject = new Subject();
subject.add(new User("张三"));
subject.add(new User("李四"));
subject.notify("设计模式更新啦!");
}
}
优缺点
- ✅ 优点:解耦主题与观察者;支持一对多通信;符合开闭原则(新增观察者仅加类);实时响应状态变化;
- ❌ 缺点:观察者过多时通知效率降低;观察者与主题循环依赖可能导致死循环;通知顺序不保证。
适用场景
1、对象间存在一对多依赖,一个对象变化需通知多个对象(如消息推送、事件监听);
2、需解耦状态变化的发布者与订阅者(如 GUI 界面更新、数据监控);
3、动态添加 / 移除订阅者,且无需修改主题代码。
最终目的:
实现事件通知;
SpringBoot 核心应用场景:
ApplicationEvent事件机制(容器启动 / 关闭事件)、缓存失效通知、监听配置刷新