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會遍歷目標對象的觀察者列表,對他們進行通知。

相關文章
相關標籤/搜索