静的クラスにイベントを送出させる

静的クラスにイベントを送出させるには、コンポジションを適用して、イベント周りの振る舞いを EventDispatcher インスタンスに委譲すればよい。これは静的クラスに限らず、既存のクラスを拡張する際に使えるテクニック。

以下、サンプルクラス。

package {
import flash.events.EventDispatcher;
import flash.events.Event;
public class Hoge {
private static var dispatcher:EventDispatcher = new EventDispatcher();
public static function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0):void {
dispatcher.addEventListener(type, listener, useCapture, priority);
}
public static function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void {
dispatcher.removeEventListener(type, listener, useCapture);
}
public static function dispatchEvent(type:String):Boolean {
return dispatcher.dispatchEvent(new Event(type));
}
public static function hasEventListener(type:String):Boolean {
return dispatcher.hasEventListener(type);
}
public static function test():void {
dispatchEvent("hoge");
}
}
}

テストコード。

Hoge.addEventListener("hoge", function():void {
trace("Hello Hoge");
});
Hoge.test();//Hello Hoge