EventListener と EventObject の扱い

先日「Head First デザインパターン」を読んだ上で、「Essential ActionScript 2.0」を再読。といっても、Chapter18(MVC) と Chapter19(Delegation Event Model) だけですが。2 回目だけあってか、理解しながら読めたことに感動……。

僕が Flash でイベントを扱うときは Developer Center の Creating Events Using the EventDispatcher Class に書いてある方法をとってるけど、これだと EventSource 側で "Object 型" の EventObject を作ってその場で EventType を与えることになる。また、Client 側ではこれまた "Object 型" の EventListener を生成している。実装も Client に書いちゃう。

Delegation イベントモデルは「俺 (EventSource) の仕事をおまえ (EventListener) が処理してくれ!詳しいことは EventObject で渡すから!」ということなので EventSource は EventListener を知る義務と EventObject を作成する責任を負う。

EventListener も、イベントの実装という重要な役割を受け持つ。……なので、EventListener はイベントに対するインターフェースを持つ (クラスにする) と strict になりますよって話 (Chapter 19)。もちろん EventObject も同様。EventListenerInterface については Java を参考にしたい。

Chapter19 の冒頭に「Are Observer and Delegation Event Model Equivalent?」とあった。実際、どちらのパターンも Subject から Object に何かを通知する点では殆ど同じだが、

In Observer, the subject broadcasts updates to observers by invoking a generic update( ) method. But in the delegation event model, the event source broadcasts a specific type of event by invoking a custom method on its listeners.

Subject と Object の関係に違いがある。