Notes
Search…
Observer

介绍

定义:观察者模式定义了对象之间的一对多依赖,当一个对象的状态改变时,它的所有依赖者都会收到通知并更新。Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
在具体实现时需要注意:
  • 若是循环同步通知,需要注意观察者的执行时间,若执行太久,则会阻塞后面观察者。可以使用异步、超时等方法解决。
  • 需要注意重复注册观察者问题。
又叫监听器模式、发布/订阅模式。

类图

源码

Java 内置的观察者模式

注意要先调用 setChanged 方法。
缺点:Observable 是一个类而不是接口,而且本身也没有实现接口。

Guava EventBus

1
package com.google.common.eventbus;
2
3
public class EventBus {
4
private final SubscriberRegistry subscribers = new SubscriberRegistry(this);
5
6
public void register(Object object) {
7
subscribers.register(object);
8
}
9
10
public void unregister(Object object) {
11
subscribers.unregister(object);
12
}
13
14
public void post(Object event) {
15
Iterator<Subscriber> eventSubscribers = subscribers.getSubscribers(event);
16
if (eventSubscribers.hasNext()) {
17
dispatcher.dispatch(event, eventSubscribers);
18
} else if (!(event instanceof DeadEvent)) {
19
// the event had no subscribers and was not itself a DeadEvent
20
post(new DeadEvent(this, event));
21
}
22
}
23
}
24
25
final class SubscriberRegistry {
26
private final ConcurrentMap<Class<?>, CopyOnWriteArraySet<Subscriber>> subscribers =
27
Maps.newConcurrentMap();
28
}
Copied!
Last modified 1yr ago