java flash tcp字節流通信(五)-java 僞事件處理器(新)

package com.event;

/**
 * 事件
 */
public class Event {
 /**發起事件的對象*/
 private Object source;
 /**事件類型*/
 private int type;
 /**參數*/
 private Object[] args;
 public Event(int type, Object ...args){
  this.type = type;
  this.args = args;
 }
 public Object getSource() {
  return source;
 }
 void setSource(Object source){
  this.source = source;
 }
 public int getType() {
  return type;
 }
 public Object[] getArgs() {
  return args;
 }
 
}

------------------------------------------------

package com.event;


/**
 *
 * 事件監聽器
 *
 */
public interface EventListener {
 
 /**
  *
  * @param event
  * @throws Exception
  */
 public void eventPerformed(Event event) throws Exception;
 
}

 

------------------------------------------------

package com.event;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * 事件派發器
 *
 */
public abstract class EventDispatcher {
 /**{key=EventType,value={key=被監聽對象,value=EventListeners}}*/
 private Map<Integer, EventListener> listeners;
 
 public EventDispatcher(){
  listeners = new HashMap<Integer, EventListener>();
 }
 
 /**
  *
  * @param eventType 事件類型
  * @param target 被監聽對象
  * @param listener 監聽器
  * @throws Exception
  */
 public void addListener(int eventType, EventListener listener) throws Exception{
  /**添加監聽器,事件類型必須是註冊過的*/
  listeners.put(eventType, listener);
 }
 
 /**
  * 移除事件監聽器
  * @param evenType 事件類型
  * @param target 被監聽對象
  */
 public void removeListener(int eventType){
  listeners.remove(eventType);
 }
 
 /**
  * 觸發事件
  * @param event
  * @return
  */
 public boolean dispatchEvent(Event event) throws Exception{
  EventListener listener = listeners.get(event.getType());
  if(listener != null){
   event.setSource(this);
   listener.eventPerformed(event);
   return true;
  }
  return false;
 }
}

 

------------------------------------------------

測試類:

package com.event.test;

import com.event.Event;
import com.event.EventDispatcher;
import com.event.EventListener;


public class EventTest extends EventDispatcher{
 public final static int LOGIN = 1;
 public final static int LOGOUT = 2;
 
 public EventTest() throws Exception{
  EventListener listener = null;
  listener = new EventListener(){
   public void eventPerformed(Event event){
    login(event);
   }
  };
  this.addListener(LOGIN, listener);
  listener = new EventListener(){
   public void eventPerformed(Event event){
    logout(event);
   }
  };
  this.addListener(LOGOUT, listener);
 }
 public void login(Event event){
  System.out.println((String)event.getArgs()[0] + " login...");
 }
 public void logout(Event event){
  System.out.println((String)event.getArgs()[0] + " logout...");
 }
 public static void main(String args[]) throws Exception{
  EventTest test = new EventTest();
  test.dispatchEvent(new Event(EventTest.LOGIN, "admin"));
  test.dispatchEvent(new Event(EventTest.LOGOUT, "admin"));
  test.removeListener(EventTest.LOGIN);
  test.dispatchEvent(new Event(EventTest.LOGIN, "admin"));
  test.dispatchEvent(new Event(EventTest.LOGOUT, "admin"));
 }
}

測試結果:

admin login...
admin logout...
admin logout...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章