在 Java 中,观察者模式(Observer Pattern)本质上解决的是“对象状态变化后,自动通知多个依赖对象”的问题。因此,它可以在很多场景下替代或弱化以下做法/模式/机制:
传统方式:
while (true) {
if (dataChanged) {
doSomething();
}
}
观察者模式替代:
✅ 替代:定时任务、循环检查状态
问题代码:
class A {
B b;
void change() {
b.update();
}
}
观察者模式替代:
✅ 替代:紧耦合的方法调用
传统方式:
if (event == LOGIN) {
logService.onLogin();
emailService.onLogin();
statService.onLogin();
}
观察者模式替代:
eventPublisher.notify(LOGIN);
✅ 替代:事件分支爆炸
原始方式:
List<Listener> listeners = new ArrayList<>();
观察者模式:
✅ 替代:手写通知管理代码
| 对比 | 观察者模式 | 消息队列(MQ) |
|---|---|---|
| 范围 | 进程内 | 跨进程 / 分布式 |
| 依赖 | 强引用 | 解耦 |
| 持久化 | 无 | 有 |
✅ 在单机、轻量场景可替代 MQ
Java 中:
ActionListenerPropertyChangeListener本质上就是观察者模式的变种
✅ 可统一抽象为 Observer
abstract class Task {
void run() {
before();
execute();
after();
}
}
观察者模式可让 before/after 动态注册
✅ 更灵活,避免继承爆炸
❌ 不能替代:
如果你用观察者模式,其实也可以直接用:
java.util.Observer(已废弃)PropertyChangeListenerApplicationEventFlow / Reactive StreamJava 观察者模式主要替代:轮询、硬编码通知、紧耦合调用、简单事件分发。
如果你有具体场景(GUI / Spring / 业务系统),我可以告诉你该不该用、用哪种更好。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。