Java 使用观察者模式(Observer Pattern),本质上是为了解决对象之间的“一对多”依赖关系,实现解耦、可扩展和事件驱动的设计。下面从几个角度说明“为什么 Java 要用观察者模式”。
在软件设计中,经常出现这种情况:
一个对象状态发生变化,其他多个对象需要跟着变化
如果直接写死调用关系,比如:
class Subject {
void change() {
a.update();
b.update();
c.update();
}
}
问题很明显:
观察者模式的作用:
让 Subject 只关心“有哪些观察者在听”,而不关心“观察者是谁、怎么处理”。
一个对象(被观察者)变化 → 多个对象(观察者)自动收到通知
典型例子:
subject.addObserver(new A());
subject.addObserver(new B());
Java 大量使用观察者模式来实现:
import java.util.Observable;
import java.util.Observer;
(虽然 Observable 已不推荐,但这是早期 Java 的设计)
button.addActionListener(e -> {
System.out.println("按钮被点击");
});
这里:
@EventListener
public void handleOrderEvent(OrderEvent event) {
// 处理订单事件
}
Spring 内部就是基于观察者模式实现的事件总线。
❌ 代码高度耦合
❌ 难以测试
❌ 难以扩展
❌ 违反单一职责原则
Java 使用观察者模式,是为了在“对象状态变化”和“后续处理”之间建立松散耦合的关系,从而实现高内聚、低耦合、可扩展的系统设计。
如果你愿意,我也可以用生活例子 / 代码示例 / 和 Spring 对比来进一步解释。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。