EventBus - (观察者模式) 消息发布订阅类库

1,简介

1)EventBus实现了观察者模式,是Google.Guava提供的消息发布-订阅类库。
2)Multimap:guava用于存储,一个key可以对应多个值的类。
底层使用private transient Map> map;来实现。
3)Eventbus处理所有的事件都以串行的方式。
4)AsyncEventBus,AsyncEventBus类提供了与EventBus相同的功能,但是使用了java.util.concurrent.executor实例来进行方法的异步处理。

2,注册过程

1)使用SubscriberFindingStrategy 找到listener所有被@Subscribe修饰的方法。并构造成EventSubscriber,包含目标对象和方法,用于反射调用。放入Multimap, EventSubscriber>中.

image.png

2)Multimap, EventSubscriber>是以参数event的Class类型作为key。
image.png

3)将不同Listener生成的multimap放入subscribersByType的SetMultimap中。
image.png

3,发布过程。

1)根据eventType获取所有的Setwrappers。
2)如果wrappers不为空,就将dispatched设置为true。

image.png

3)将每一个wrapper放入当前线程的eventToDispatch队列。
image.png

4)dispatchQueuedEvents发布消息。
从当前线程取出Queue events,while循环dispatch消息。
image.png

4,调用流程

1)创建一个事件总线。

image.png

2)注册订阅者到EventBus
image.png

3)发布消息,分发消息
image.png

将所有观察者入队enqueueEvent到当前线程的ThreadLocal>设置dispatched = true
image.png

4)while循环,下发消息到每一个观察者dispatchQueuedEvents()
image.png

5)使用反射处理,调用方法,传入event参数
image.png

image.png

你可能感兴趣的:(EventBus - (观察者模式) 消息发布订阅类库)