JAVAイベントリスニングメカニズムのカスタマイズ

2862 ワード

JAVAにおけるイベントメカニズムの参加者には,Event,EventSource,Listenerの3つの役割がある.
1.Event:イベント発生時の具体的な「イベント」であり、Listenerの対応するメソッドに用いられ、パラメータとしてListenerのメソッドに一般的に存在する.
2.EventSource:イベントソース、その役割は主にイベントとリスニングを統一的に管理し、具体的にイベントを受け入れるエンティティ、例えばbuttonをクリックすると、buttonはEventSourceであり、buttonをいくつかのイベントに応答させる必要があります.MouseEventのMouseClickedメソッドなど、特定のlistenerを登録する必要があります.このときaddメソッドが必要です.
3.Listener:具体的なリスニングを行うイベントクラスは、その対応するEventが発生すると、対応するメソッドを呼び出して処理する.Windowsプログラム設計では,この応答はcallbackメカニズムを用いて実現される.
まず、java.util.EventObjectクラスを継承するイベントを定義します.
import java.util.EventObject;

public class ServerUpdateEvent extends EventObject {

	private static final long serialVersionUID = 1L;

	private Object obj;

	public ServerUpdateEvent(Object source) {
		super(source);
	}

	public Object getObj() {
		return obj;
	}

}

次に、イベントリスニング管理クラスを定義し、リスニングの追加、削除、起動を実現する
import java.util.ArrayList;
import java.util.List;

/**
 *    
 * 
 * Date 2018 9 6    4:24:06
 * 
 * 
 */
public class ServerUpdateEventSource {

	private static List listeners = new ArrayList();

	public ServerUpdateEventSource() {
	}

	//       
	public void addServerUpdateEventListener(ServerUpdateListenerInterface e) {
		listeners.add(e);
	}

	//       
	public void deleteServerUpdateEventListener(ServerUpdateListenerInterface e) {
		listeners.remove(e);
	}

	//       
	public void fireServerUpdateEvent(ServerUpdateEvent event) {
		for (ServerUpdateListenerInterface listener : listeners) {
			listener.handleEvent(event);
		}
	}
}

第三に、イベントリスニングインタフェースの定義とjava.util.EventListenerの実装
a.インタフェース
import java.util.EventListener;

public interface ServerUpdateListenerInterface extends EventListener {
	void handleEvent(ServerUpdateEvent serverUpdateEvent);
}

b.実現
public class ServerUpdateListener implements ServerUpdateListenerInterface {

	//          ,          
	protected void doReloadExecutors(ServerUpdateEvent e) {
		System.out.println(e);
	}

	@Override
	public void handleEvent(ServerUpdateEvent serverUpdateEvent) {
		doReloadExecutors(serverUpdateEvent);
	}
}

最終テスト
public class ServerListenerTest {

	public static void main(String[] args) {
		//         
		ServerUpdateEventSource eventSource = new ServerUpdateEventSource();
		ServerUpdateListener listener = new ServerUpdateListener();
		
		//     ,        
		eventSource.addServerUpdateEventListener(listener);
		
		//       
		ServerUpdateEvent event = new ServerUpdateEvent("HelloWorld");
		//         ,             @Override  
		eventSource.fireServerUpdateEvent(event);
	}
}

実行結果
ServerUpdateEvent[source=HelloWorld]
簡単なjavaカスタムイベントとリスニングの例が実現されます.