不再多的廢話,直奔Guava EventBus主題。首先Guava為我們提供了同步事件EventBus和異步實作AsyncEventBus兩個事件總線,他們都不是單例的,官方理由是并不想我們我們的使用方式。當然如果我們想其為單例,我們可以很容易封裝它,一個單例模式保證隻建立一個執行個體就對了。
下面将以EventBus為例,AsyncEventBus使用方式與其一緻的。
首先EventBus為我們提供了register方法來訂閱事件,Guava在這裡的實作很友好,我們不需要實作任何的額外接口或者base類,隻需要在訂閱方法上标注上@Subscribe和保證隻有一個輸入參數的方法就可以搞定。這樣對于簡單的某些事件,我們甚至可以直接
Guava釋出的事件預設不會處理線程安全的,但我們可以标注@AllowConcurrentEvents來保證其線程安全
對于事件源,則可以通過post方法釋出事件。 正在這裡對于Guava對于事件的釋出,是依據上例中訂閱方法的方法參數類型決定的,換而言之就是post傳入的類型和其基類類型可以收到此事件。例如下例:
在這裡有 Integer,Long,與它們基類Number。我們發送一個整數資料的時候,或者Integer和Number的方法接收,而Long類型則Long類型和Number類型接受。
是以部落客建議對于每類事件封裝一個特定的事件類型是必要的。
DeadEvent暫時不清楚怎麼翻譯更合意,它描述的是死亡事件,即沒有沒任何訂閱者關心,沒有被處理,以DeadEvent類型參數的方法表示.例如在上例中我們post一個Object類型,如下:
更多Guava博文:
<a href="http://greengerong.github.io/blog/2014/11/21/guava-bing-xing-bian-cheng-futures/">Guava – 并行程式設計Futures</a>
<a href="http://greengerong.github.io/blog/2014/11/27/guava-eventbus/">Guava – EventBus(事件總線)</a>
本文轉自破狼部落格園部落格,原文連結:http://www.cnblogs.com/whitewolf/p/4132840.html,如需轉載請自行聯系原作者