eventbus是Google Guava的事件訂閱-發布組件。其特點是簡單易用,需要編寫的代碼量很小,也不需要繼承。
Pom依賴
<dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </dependency> </dependencies>
一. EventBus
google eventbus並沒有強制要求使用單例的EventBus,而是可以自行創建,你可以在一個容器內擁有多個EventBus實例,當然也可以自行將其配置為單例。下面的代碼是將EventBus配置成單例的
package study.yan.google.eventbus.demo; import com.google.common.eventbus.EventBus; public class EventBusCenter { private static EventBus eventBus = new EventBus(); private EventBusCenter() { } public static EventBus getInstance(){ return eventBus; } public static void register(Object object){ eventBus.register(object); } public static void unregister(Object object){ eventBus.unregister(object); } public static void post(Object object){ eventBus.post(object); } }
二. Observer
只需要在類的方法上加上@Subscribe注解即可
package study.yan.google.eventbus.demo; import com.google.common.eventbus.Subscribe; public class AdviceObserver1 { @Subscribe public void ff1(AdviceObserverEventArgs args) { System.out.println("ff2:" + args); } }
package study.yan.google.eventbus.demo; import com.google.common.eventbus.Subscribe; public class AdviceObserver2 { @Subscribe public void ff1(AdviceObserverEventArgs args) { System.out.println("ff1:" + args); } }
三. Publish
調用eventBus的post方法來發布一個事件
package study.yan.google.eventbus.demo; public class Program { public static void main(String[] args) { DataObserver1 dataObserver1 = new DataObserver1(); DataObserver2 dataObserver2 = new DataObserver2(); EventBusCenter.register(dataObserver1); EventBusCenter.register(dataObserver2); EventBusCenter.post("a string"); EventBusCenter.post(1); System.out.println("=============="); EventBusCenter.unregister(dataObserver1); EventBusCenter.post("a string"); EventBusCenter.post(1); } }