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 Eventevent() { 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(); } }