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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章
相关标签/搜索