观察者模式 - 969251639/study GitHub Wiki
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
项目场景:在处理玩主流程逻辑后,需要做一些额外的操作,那么这些操作完全可以通过事件方式发送出去,实现与主流程的解耦
- 定义观察者
public interface Listener {
public void notify(...) throws Exception;
}
public class AObserver implements Listener {
@Override
public void notify(...) throws Exception {
...
}
}
public class BObserver implements Listener {
@Override
public void notify(...) throws Exception {
...
}
}
- 定义主题和监听该主题的观察者
public class Subject {
private List<Listener> listeners = new ArrayList<>();
public Subject() {
AObserver aObserver = new AObserver();
BObserver bObserver = new BObserver();
listeners.add(aObserver);
listeners.add(bObserver);
}
public void publish(...) {
//doSomething
notify(...);
}
private void notify(...) {
for(Listener listener : listeners) {
listener.notify(...);
}
}
}
- 使用
Subject subject = new Subject();
subject.publish(...);