在 Java 中,观察者模式(Observer Pattern)和发布订阅模式(Publish–Subscribe Pattern)经常被拿来比较,因为它们思想相似,但耦合程度、结构和适用场景不同。下面从多个维度说明区别。
// 伪代码
subject.addObserver(observer);
subject.notifyObservers();
Publisher → EventBus → Subscriber
| 对比点 | 观察者模式 | 发布订阅模式 |
|---|---|---|
| 耦合度 | 中(Subject 知道 Observer) | 低(完全解耦) |
| 通信方式 | 直接调用 | 通过中间媒介 |
| 是否同步 | 通常同步 | 可同步可异步 |
| 使用范围 | 单应用内 | 单应用 / 分布式 |
| 典型实现 | Java Observable / 自定义接口 | EventBus、RabbitMQ、Kafka |
| 扩展性 | 一般 | 非常好 |
class Subject {
private List<Observer> observers = new ArrayList<>();
public void add(Observer o) { observers.add(o); }
public void notifyAll(String msg) {
for (Observer o : observers) o.update(msg);
}
}
Java 自带的
java.util.Observable已过时,不推荐
EventBus bus = new EventBus();
bus.register(subscriber);
bus.post(new MessageEvent("hello"));
✅ 使用 观察者模式 当:
✅ 使用 发布订阅模式 当:
观察者模式是“你盯着我”,发布订阅是“我们都盯着公告板”。
如果你愿意,我也可以帮你画 UML 图 或写 完整可运行示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。