- 2007-01-06 (土) 0:26
- action script
引き続き「Object-oriented ActionScript for Flash 8」12章のObserverパターンについてメモ。エントリの内容は、実際に本を持っていないと分からないかと思います。
この章のサンプルでは、監視される側のクラスファイルを作成している。一般にObserverパターンは、監視される側(単体)を”Subject”と呼び、通知を受け取る側(自分自身を登録する側:複数個)を”Observer”=観察者と呼ぶのだが、この章のサンプルではObserver.asファイルにてSubject役のクラスインスタンスを生成しているので、誤解しやすいので注意が必要。以上をふまえて、役割ごとに特徴をリストアップすると:
Subject(サンプルではObserverクラスのインスタンス)
- 通常、単体である。
- 監視される側の存在。
- Observer役のインスタンス達をsubscribers(登録者)配列に格納している。
- 自分の状態の変更をnotifyChangesメソッドを通じて登録者に通知(登録者のupdateメソッドを実行)する。
- 登録関連メソッドにおいて、Observerオブジェクトの重複登録や未登録インスタンスの削除を防ぐ仕様に改良できる。
Observer
- 通常複数個である。
- Subjectの状態変化を通知される側。
- Subjectの状態変化に応じて、アクションを起こす側。
- 自分自身をSubjectにsubscribe(登録・購読)することで、Subjectを監視する。
- Subjectの立場から見ると、subscriber(登録者)的存在。
- 通知を受け取ったときの各自の振る舞いは、updateメソッドに記述されている。
- なので、各自がupdateメソッドを持っている必要があるが、13章での改良で、メソッド名を統一させなくてもOKな仕様に改良できる(はず。)
あと、テクニックとして
- 登録された順番の逆順でupdateメソッドが実行されるので、subscribers(登録者)配列の実行順にこだわる場合は、subscribers.reverse()で、配列をひっくり返すとよい。
- 通知を受けるObserverをdeleteする時は、事前にリスト(登録者配列)から自分を削除しておいてから、deleteすること。例えると、雑誌の年間購読の申し込みをしたまま、自殺するなという感じ。
で、p167から、実用的なサンプルとして、参加者リストを表示するアプリケーションを作っていくのだけれど、Attendees.asにおいて、配列attendeesListの役割は、参加者名を格納する配列としてのみである。Observer役として通知を受け、update()するのは継承元のObserverクラス内のaddSubscriberメソッドの引数となるattendeeMonitorである。
このサンプルのように、出入りの激しい出席リスト:重複登録を避けたい場合や、出席者の数を表示したりするアプリケーションにおすすめ。
- Newer: FlashとSingletonパターン
- Older: Flashでのデザインパターン
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.trick7.com/blog/2007/01/06-002652.php/trackback
- Listed below are links to weblogs that reference
- FlashとObserverパターン from trick7