Java 中的**观察者模式(Observer Pattern)**是一种行为型设计模式,核心思想是:一个对象状态发生变化时,自动通知依赖它的其他对象。
下面从适用场景、典型例子、优缺点几个方面说明。
观察者模式适合以下场景:
当一个对象(被观察者)的变化需要同时影响多个对象(观察者),且你不想让它们紧密耦合时。
✅ 示例:
系统需要基于“事件”来做响应,而不是主动调用。
✅ 示例:
ApplicationEvent模型(Model)变化 → 视图(View)自动刷新。
✅ 示例:
不同业务模块不希望互相直接调用,只关心“某种事件发生”。
✅ 示例:
很多 Java 框架本身就用了观察者模式。
✅ 示例:
java.util.Observable / Observer(早期)EventListenerclass Subject {
List<Observer> observers = new ArrayList<>();
void add(Observer o) { observers.add(o); }
void notifyAll(String msg) {
observers.forEach(o -> o.update(msg));
}
}
java.util.Observable
java.util.Observer
⚠️ 已不推荐使用(设计不够灵活)
@Component
public class EmailListener {
@EventListener
public void onUserRegister(UserRegisterEvent event) {
// 发邮件
}
}
❌ 观察者很少(1 个) ❌ 调用链必须严格控制顺序 ❌ 性能极其敏感、通知频繁且复杂
只要你想“一个变化,多方响应,又不希望互相耦合”,就可以考虑观察者模式。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。