關於JAVA中事件分發和監聽機制實現的程式碼例項-絕對原創實用
轉載:http://blog.csdn.net/5iasp/article/details/37054171
謝謝博主
=======================================================================================================
文章標題:關於Java中事件分發和監聽機制實現的程式碼例項
作者: javaboy2012
Email:[email protected]
qq: 1046011462
一、場景假設
假設有部落格系統中需要實現如下功能:
系統中使用者釋出文章,修改文章,刪除文章時,需要一些相關的操作需要執行。
釋出文章後,給好友傳送郵件通知,給使用者加積分,對文章做全文索引。
修改文章後,給好友傳送郵件修改通知,給使用者加積分,對文章重新做全文索引。
刪除文章後,給好友傳送郵件修改通知,給使用者減少積分,對文章重新做全文索引。
二、相關的概念解析
分析如上場景,可以採用事件分發和監聽機制來實現。
事件分發和監聽有如下幾個概念:
事件源:觸發事件的物件 如上場景中我們把實體物件作為事件源,釋出的文章就是事件源
事件: 對事件源的操作產生事件,例如 發表文章 修改文章,刪除文章這些操作就會觸發相關的 文章被髮表事件,文章被刪除事件,文章被修改事件
事件監聽器:對事件源各種事件觸發執行行為的抽象,包括介面和若干實現類。
比如: 介面需要定義事件源相關事件觸發時需要實現的操作介面。
事件分發器:事件分發器主要處理事件的分發和事件監聽器的管理,註冊和刪除事件監聽器等。
三、 程式碼示例
專案結構:
根據上述概念相關程式碼如下:
包括如下程式碼
1. 部落格文章類 屬於事件源
- package com.yanek.event;
- /**
- * 部落格文章
- * @author Administrator
-
*
- */
- publicclass Entry {
- publiclong getId() {
- return id;
- }
- publicvoid setId(long id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- publicvoid setName(String name) {
- this.name = name;
- }
- privatelong id; // 編號
- private String name; //標題
- }
2. 部落格文章事件類 屬於事件物件
其中定義了事件的型別和事件源,事件引數
- package com.yanek.event;
- import java.util.Collections;
- import java.util.Date;
- import java.util.Map;
- /**
- * 部落格文章事件
- * @author Administrator
- *
- */
- publicclass EntryEvent
- {
- publicstaticfinalint ENTRY_ADDED = 100; //事件型別:部落格文章被建立
- publicstaticfinalint ENTRY_DELETED = 101;//事件型別:部落格文章被刪除
- publicstaticfinalint ENTRY_MODIFIED = 102;//事件型別:部落格文章被修改
- privateint eventType; //事件型別
- private Entry entry; //部落格文章物件
- private Date date; //事件觸發日期
- private Map params; //事件輔助引數
- public EntryEvent(int eventType, Entry entry, Map params) {
- this.eventType = eventType;
- this.entry = entry;
- this.params = params != null ? Collections.unmodifiableMap(params)
- : null;
- date = new Date();
- }
- publicint getEventType() {
- return eventType;
- }
- public Entry getEntry() {
- return entry;
- }
- public Map getParams() {
- return params;
- }
- public Date getDate() {
- return date;
- }
- }
3. 事件監聽器介面和實現類:
定義各種事件發生時需要處理的介面方法
- package com.yanek.event;
- /**
- * 部落格文章監聽器介面
- * @author Administrator
- *
- */
- publicinterface EntryListener
- {
- /**
- * 部落格文章被建立
- * @param entryevent
- */
- publicabstractvoid entryAdded(EntryEvent entryevent);
- /**
- * 部落格文章被刪除
- * @param entryevent
- */
- publicabstractvoid entryDeleted(EntryEvent entryevent);
- /**
- * 部落格文章被修改
- * @param entryevent
- */
- publicabstractvoid entryModified(EntryEvent entryevent);
- }
事件監聽器介面的實現類:
實現場景中的三類操作,監聽器介面實現包括如下三個類實現
IndexManager 索引管理器類
ScoreManager 積分管理器類
EmailManager 郵件管理器類
三個類都實現監聽器介面EntryListener。具體程式碼如下:
- package com.yanek.event;
- /**
- * 郵件管理器
- * @author Administrator
- *
- */
- publicclass EmailManager implements EntryListener{
- @Override
- public