温馨提示×

温馨提示×

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

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

java观察者模式和发布订阅区别

发布时间:2026-10-24 12:24:20 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 中,观察者模式(Observer Pattern)和发布-订阅模式(Publish-Subscribe Pattern)经常被拿来比较,因为它们思想相似,但实现方式、耦合程度和适用场景不同。下面从多个维度说明区别。


一、核心概念对比

1. 观察者模式(Observer)

  • 定义:对象(Subject)维护一组观察者(Observer),状态变化时直接通知观察者。
  • 关系:一对多,直接依赖
  • 典型实现:java.util.Observer / Observable(已废弃),或自定义接口
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) {
        for (Observer o : observers) o.update(msg);
    }
}

2. 发布-订阅模式(Pub/Sub)

  • 定义:发布者不直接通知订阅者,而是通过**中间媒介(事件总线 / 消息队列)**通信
  • 关系:完全解耦
  • 典型实现:
    • Java:EventBus(Guava)
    • MQ:Kafka、RabbitMQ
    • Spring:ApplicationEvent
// 发布者
eventBus.post(new OrderEvent());

// 订阅者
@Subscribe
public void onOrder(OrderEvent e) { ... }

二、主要区别(重点)

对比点 观察者模式 发布-订阅模式
耦合度 高(Subject 知道 Observer) 低(互不认识)
通信方式 直接调用 通过中间层
角色关系 Subject ↔ Observer Publisher → Broker → Subscriber
扩展性 差 好
同步/异步 通常同步 可同步可异步
典型应用 UI、状态监听 分布式、解耦系统

三、典型使用场景

✅ 用观察者模式

  • GUI 事件(按钮点击)
  • 对象状态变化通知
  • 简单本地逻辑

✅ 用发布-订阅

  • 微服务通信
  • 日志、监控、审计
  • 业务解耦(订单 → 库存 / 通知)

四、一句话总结

观察者模式是“你盯着我”
发布-订阅是“我们都看公告板”

如果你愿意,我可以:

  • 用 Spring Event 演示 Pub/Sub
  • 对比 Observer vs Listener
  • 讲 为什么 Java 弃用 Observable

你想看哪一个?

向AI问一下细节

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

AI
助
手