在真正开始编写自己的响应式框架之前,我们先来从观察者模式说起。已经对观察者模式很熟悉的可以直接掠过。
基本概念
观察者模式属于对象行为模式之一,也可叫做发布——订阅模式。它定义了一种以对多的依赖关系,让多个观察者(订阅者)同时观察(监听)一个被观察者(主题),当被观察者的状态发生变化时,会通知所有的观察者对象。
在我们了解什么是观察者模式之后,我们来看一下观察者模式的结构:
通过上图我们可以看出观察者涉及到了四种角色:
- 抽象主题角色(Subject):抽象主题角色保存了所有注册的观察者的引用,同时提供了对观察者的管理,抽象主题角色也叫做被观察者(Observable)
- 具体主题角色(ConcreteSubject):在具体主题内部状态发生变化时,给所有注册过的观察这发出通知.
- 抽象观察者角色(Observer):为所有的具体观察者定义的约束接口,在得到主题通知时更新自己.
- 具体观察者角色(ConcreteObserver):具体观察者实现抽象观察者角色,以便接受主题改变的状态.
代码实现
现在我们来看一下代码的实现
抽象主题角色:
public abstract class Subject {
private List<Observer> list = new ArrayList<>();
//将observer注册到Subject
public void attach(Observer observer) {
list.add(observer);
}
//移除某个observer
public void detach(Observer observer) {
list.remove(observer);
}
//通知所有observer
public