EventBus for Android 中的观察者模式实现

网址:http://greenrobot.github.io/EventBus/

EventBus for Android,是针对android优化的事件总线实现,能够实现activities、fragments、threads、services之间的通信。

EvenBus 是发布/订阅模式(也叫观察者模式)的一种实现,及一个发布者对应多个订阅者,发布者发布消息通知多个订阅者

先来看下观察者模式中的角色定义

1、抽象目标角色(Subject):目标角色知道他的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现

2、抽象观察者(Observer):为那些在目标发生改变时需要获得通知的对象定义一个更新接口。抽象观察者角色主要有抽象类或者接口来实现

3、具体目标角色(Concrete Subject):将有关状态存入各个Concrete Observer 对象。当他的状态发生改变时,向他的各个观察者发出通知。

4、具体观察者角色(Concrete Observer):存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。在本角色内可以维护一个志向ConcreteSubject对象的引用。

在来看看EvenBus中的对应角色实现

1、目标角色,EventBus中并没有定义抽象的目标角色,而具体的目标角色就是普通的java对象,任何的java对象都可以成为目标角色,这里具体的目标角色并不提供注册或删除观察者的实现,也不维护观察者列表,他们之间的实现都由一个事件总线的机制来维护,将在下面介绍。

2、观察者角色,EventBus中提供了观察者角色的通用实现,而更新接口的实现,就是通用实现里存储的具体方法。中EvenBus中是先有具体的更新方法,再为其包装了一个观察者。也可以理解为 这个具体个更新方法,既是更新接口的实现也是观察者。

3、事件总线,在通常的观察者模式中,观察者和具体目标是耦合的,而在EvenBus中观察者和目标对象不直接交互,而是通过一个中间件EvenBus,事件总线。在EvenBus中维护了一个目标对象和观察者的映射。当有目标对象发生变化了,会告诉EvenBus,EvenBus会遍历目标对象的观察者列表,对他们进行通知。






你可能感兴趣的:(EventBus for Android 中的观察者模式实现)