温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java观察者模式典型应用有哪些

发布时间:2026-09-13 06:11:45 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

Java 中**观察者模式(Observer Pattern)**是非常经典、应用极广的设计模式,核心思想是:
一个对象(被观察者 / Subject)状态变化时,自动通知所有依赖它的对象(观察者 / Observer)。

下面按典型应用场景 + Java 中具体例子来说明。


一、Java 标准库中的典型应用

1. java.util.Observable / Observer(早期标准实现)

  • 说明:JDK 自带的观察者模式实现
  • 应用:教学、早期项目
  • 示例:
class WeatherData extends Observable {
    void measurementsChanged() {
        setChanged();
        notifyObservers();
    }
}

class Display implements Observer {
    public void update(Observable o, Object arg) {
        System.out.println("数据更新");
    }
}

⚠️ Java 9 已标记为 @Deprecated


2. Swing / AWT 事件机制(GUI 编程)

这是最典型的观察者模式应用之一

  • 被观察者:按钮、文本框等组件
  • 观察者:事件监听器
  • 示例:
button.addActionListener(e -> {
    System.out.println("按钮被点击");
});
  • 本质:
    • Button → Subject
    • ActionListener → Observer

3. Spring 框架中的事件机制

Spring 大量使用观察者模式

(1)ApplicationEvent

  • ApplicationEventPublisher:被观察者
  • ApplicationListener:观察者
@Component
public class MyListener implements ApplicationListener<MyEvent> {
    public void onApplicationEvent(MyEvent event) {
        System.out.println("收到事件");
    }
}

(2)@EventListener

@EventListener
public void handleEvent(MyEvent event) {}

✅ 解耦、异步、事务事件都基于观察者模式


4. 消息中间件 / 发布订阅(MQ)

  • Kafka
  • RabbitMQ
  • Redis Pub/Sub

本质:

  • 发布者 → 被观察者
  • 订阅者 → 观察者

二、业务开发中的典型应用

5. 订单状态变更通知

订单支付成功
  ├─ 发短信
  ├─ 发邮件
  ├─ 更新库存
  └─ 记录日志

✅ 使用观察者模式避免 if-else 爆炸


6. 配置中心动态刷新

  • Nacos / Apollo
  • 配置变更 → 通知所有监听器

7. 日志系统

  • 日志级别变化
  • 多端输出(文件、控制台、远程)

8. 监控系统

  • 指标变化
  • 触发告警(邮件、短信、钉钉)

三、简单手写观察者模式示例

interface Observer {
    void update(String msg);
}

class Subject {
    private List<Observer> observers = new ArrayList<>();

    void add(Observer o) { observers.add(o); }

    void notify(String msg) {
        observers.forEach(o -> o.update(msg));
    }
}

四、什么时候该用观察者模式?

✅ 适合:

  • 一对多依赖
  • 状态变化需要广播
  • 模块之间需要解耦

❌ 不适合:

  • 强顺序依赖
  • 需要返回值
  • 调用链复杂

如果你愿意,我也可以:

  • 用 Spring 事件写一个完整示例
  • 对比 观察者 vs 发布订阅
  • 分析 观察者模式的坑(内存泄漏、线程安全)

你想看哪一个?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手