Java向けEventフレームワーク作ってみた

JavaでEventを取り扱う組みと言うと、 AWT/Swing等で使用されるようなListenerインターフェースやObserverパターン等が上げられます。

これらにはイベントのdispatch、追加、削除をすべて独自に記述する必要があるため、 作成に手間がかかるという問題があります。

問題を解消するために、独自のEventフレームワークを開発しました。 このEventフレームワークでは独自のイベントを最小限のコードで追加できるように設計しています。

また、多数のEventが存在するオブジェクトの一部のEventしか使用しないような場合に、 メモリ効率が高くなるよう設計しています。

http://dropdown.whoa.jp/dachicraft-toolkit/#event

サンプル

/**
 * イベントを提供するクラス
 */
public class EventSample 
{
    // 各種Eventを格納するEventSet
	private EventSet events = new EventSet(); 

	// イベントを識別する名称
	private static final String EVENT = "event";
	
	// オブジェクト外部に対してイベントを公開するメソッド
	public Event event() {
		return events.getEvent(EVENT, EventArgs.class);
	}
	// イベントを発生させるメソッド
	protected void onEvent(EventArgs e) {
		events.dispatchEvent(EVENT, this, e);
	}
	
	public void process()
	{
		onEvent(EventArgs.EMPTY);
	}
}

 

/**
 * イベントを提供するクラス
 */
public class EventClient
{
	public static void main(String[] args)
	{
		EventSample obj = new EventSample();
		
		// イベントリスナーの登録。
		obj.add(new EventListener {
			@Override
			public void invoke(Object sender, CanceledEventArgs e) {
				System.out.println("Hello world.");
			}
		});
		
		obj.process();
	}
}