在 Java 中,观察者模式(Observer Pattern)和监听器(Listener)经常被一起提到,但它们并不是完全等价的概念。可以从设计意图、使用方式、实现机制几个角度来看区别。
一种设计模式,用于一对多的依赖关系:
当一个对象(被观察者 / 主题)状态发生变化时,所有依赖它的对象(观察者)都会收到通知并自动更新。
关注点:
典型示例:
java.util.Observable / Observer(旧 API)ApplicationEvent + ApplicationListener一种编程机制 / 接口约定,通常用于响应某种事件。
关注点:
典型示例:
ActionListener(Swing)ServletContextListenerMouseListener监听器通常是观察者模式的一种具体实现形式
✅ 观察者模式是“思想”
✅ 监听器是“实现方式之一”
// 观察者
interface Observer {
void update(String msg);
}
// 被观察者
class Subject {
private List<Observer> observers = new ArrayList<>();
void add(Observer o) {
observers.add(o);
}
void notifyAll(String msg) {
observers.forEach(o -> o.update(msg));
}
}
特点:
// 监听器接口
interface ClickListener {
void onClick();
}
// 事件源
class Button {
private ClickListener listener;
void setClickListener(ClickListener l) {
this.listener = l;
}
void click() {
if (listener != null) {
listener.onClick();
}
}
}
特点:
| 对比维度 | 观察者模式 | 监听器 |
|---|---|---|
| 本质 | 设计模式 | 实现机制 / 接口 |
| 通知方式 | 批量通知 | 事件触发 |
| 关注点 | 状态变化 | 行为 / 事件 |
| 耦合度 | 低 | 低 |
| 使用场景 | 数据变化、状态同步 | UI、框架事件 |
| 是否一定事件 | 否 | 是 |
✅ 用观察者模式当:
✅ 用监听器当:
观察者模式是“通知机制的设计思想”,监听器是“事件响应的实现方式”。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。