標籤:java event
代碼:http://git.oschina.net/jmpp/CommonEvent
自己寫的一個簡單的Java事件架構。目前具備以下功能:
1.通過繼承Event類,使用者可自訂事件。
2.通過EventService 的fireEvent(Event e) 發出一個事件。
3.通過實現IEventHandler介面,監聽某類事件。EventHandler可以動態註冊到EventServer,也可以在設定檔中配置。
4.通過實現IEventConsumedCallback介面,在事件被處理後,通知事件發出者。IEventConsumedCallback可在fireEvent時指定,也可不指定。
5.fireEvent 和 Consume Event都是非同步進行,Consume Event時採用線程池處理。
類圖如下:
代碼:http://git.oschina.net/jmpp/CommonEvent(包含測試代碼)
測試:
1.自訂Event
import com.lenovo.commonevent.Event;/** * Project: CommonEvent * FileName: TestEvent.java * @Description: TODO * @author: jmpp * Createdate: 2015年3月16日 下午5:57:12 * Copyright: Copyright(C) 2014-2015 * Company Lenovo LTD. * All rights Reserved, Designed By Lenovo CIC. *//** * 類 TestEvent 的實現描述:TODO 類實現描述 * * @author jmpp 2015年3月16日下午5:57:12 */public class TestEvent extends Event { public TestEvent() { super(TestEvent.class.getSimpleName()); }}
2.定義一個EventHandler
import java.util.Date;import com.lenovo.commonevent.Event;import com.lenovo.commonevent.IEventHandler;/** * Project: CommonEvent * FileName: TestEventHandler.java * @Description: TODO * @author: jmpp * @version V1.0 * Createdate: 2015年3月16日 下午6:00:34 * Copyright: Copyright(C) 2014-2015 * Company Lenovo LTD. * All rights Reserved, Designed By Lenovo CIC. *//** * 類 TestEventHandler 的實現描述:TODO 類實現描述 * * @author jmpp 2015年3月16日下午6:00:34 */public class TestEventHandler implements IEventHandler { /** * @author jmpp 2015年3月16日下午6:00:48 */ @Override public Object onEvent(Event event) { System.out.println("On event " + event.getId() + " Type:" + event.getType()); return new Date(); }}
3.定義EventConsumedCallback
import java.util.Date;import com.lenovo.commonevent.Event;import com.lenovo.commonevent.EventService;import com.lenovo.commonevent.IEventConsumedCallback;/** * Project: CommonEvent * FileName: TestEventInvoker.java * @Description: TODO * @author: jmpp * @version V1.0 * Createdate: 2015年3月16日 下午6:03:47 * Copyright: Copyright(C) 2014-2015 * Company Lenovo LTD. * All rights Reserved, Designed By Lenovo CIC. *//** * 類 TestEventInvoker 的實現描述:TODO 類實現描述 * * @author jmpp 2015年3月16日下午6:03:47 */public class TestEventInvoker implements IEventConsumedCallback { /** * @author jmpp 2015年3月16日下午6:04:02 */ @SuppressWarnings("deprecation") @Override public void onEventFinished(Event event, Object result) { System.out.println("Event callback " + event.getId() + " at " + ((Date) result).toLocaleString()); }}
4.測試調用 觸發事件-〉處理事件(Handle) ->回調Callback
import java.util.Date;import com.lenovo.commonevent.Event;import com.lenovo.commonevent.EventService;import com.lenovo.commonevent.IEventConsumedCallback;/** * Project: CommonEvent * FileName: TestEventInvoker2.java * @Description: TODO * @author: jmpp * @version V1.0 * Createdate: 2015年3月16日 下午6:03:47 * Copyright: Copyright(C) 2014-2015 * Company Lenovo LTD. * All rights Reserved, Designed By Lenovo CIC. *//** * 類 TestEventInvoker2 的實現描述:TODO 類實現描述 * * @author jmpp 2015年3月16日下午6:03:47 */public class TestEventInvoker2 { public static void main(String args[]) throws Exception { EventService.init(null); EventService.registerEventHandler(TestEvent.class.getSimpleName(), new TestEventHandler()); for (int i = 0; i < 10; i++) { TestEvent event = new TestEvent(); EventService.fireEvent(event, new TestEventInvoker()); } Thread.sleep(5000); EventService.stop(); }}
簡單的Java Event-事件架構