在 Java 中,观察者模式(Observer Pattern)和发布-订阅模式(Publish-Subscribe Pattern)经常被拿来比较,因为它们思想相似,但实现方式、耦合程度和适用场景不同。下面从多个维度说明区别。
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);
}
}
EventBus(Guava)ApplicationEvent// 发布者
eventBus.post(new OrderEvent());
// 订阅者
@Subscribe
public void onOrder(OrderEvent e) { ... }
| 对比点 | 观察者模式 | 发布-订阅模式 |
|---|---|---|
| 耦合度 | 高(Subject 知道 Observer) | 低(互不认识) |
| 通信方式 | 直接调用 | 通过中间层 |
| 角色关系 | Subject ↔ Observer | Publisher → Broker → Subscriber |
| 扩展性 | 差 | 好 |
| 同步/异步 | 通常同步 | 可同步可异步 |
| 典型应用 | UI、状态监听 | 分布式、解耦系统 |
观察者模式是“你盯着我”
发布-订阅是“我们都看公告板”
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。