观察者模式(Observer Pattern)

定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。

模式结构

以Netty为例列举下它所包含的结构。

观察者模式角色 Netty中的对应实现
Subject ChannelFuture/Future
Observer GenericFutureListener/ChannelFutureListener
注册观察者方法 addListener()
通知观察者方法 内部调用listener.operationComplete(future)

简要代码示例,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 观察者接口
interface Observer {
void update(String message);
}

// 被观察者
class Subject {
private List<Observer> observers = new ArrayList<>();

public void addObserver(Observer observer) {
observers.add(observer);
}

public void notifyAllObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}

public void changeState() {
// 模拟状态变化
notifyAllObservers("StateChanged");
}
}