FlashとSingletonパターン

Singleton(シングルトン)パターンは、インスタンスを絶対に1つしか持たないクラスを設計し、そのインスタンスにプロジェクト内のデータ管理を一極集中でマネージメントさせる手法。

まぁ管理するほどデータが多くない場合や、p172, 173のような擬似Singletonパターンでも、力技的でアリといえばアリなのだけど、やはりSingletonパターンを採用する理由を挙げるならば、唯一の存在であると保証されているインスタンスでデータ管理することの安心感を、制作者本人だけでなく、プロジェクトメンバーの共通認識として保障しておけるのがメリットな感じです。あと、コードもスマートですし。

クラス設計の考え方の核となるのが、p176のコード。

  • まず、コンストラクタは private にしておくことで、外部からインスタンス生成できないようにブロックしておく。
  • じゃあどうやって生成するのよ?ということで、 publicstatic なgetInstanceメソッドを用意。publicなので、flaや他asファイル等からの呼び出しが可能。static宣言により、クラスメソッド扱いになるので、var mySingleton:Singleton = Singleton.getInstance(); と呼び出せます。
  • getInstanceメソッド内部では、Singletonインスタンスが既に存在しているかどうかをチェックし、存在していなければインスタンス生成、存在してれば作らないことを保障してくれます。存在判定にはコード先頭で定義しておいた privatestatic なSingletonインスタンス参照(変数名:instance)を利用。これはクラスファイル外からはコントロールできないので、偽装される心配はありません。

次に、p177からは実用例を紹介。Observerパターンで作った「参加者リスト表示サンプル」を発展させ、参加者が出席する複数のミーティングルームをSingletonインスタンスで管理するサンプルを作成する。

データホルダーとしてSingletonインスタンス(あとで作るflaで、myMeetingManagerと命名)を利用。そのインスタンスに、{name,instance}のオブジェクトを要素として格納する配列 meetingRooms を定義する。
(作例ではMeetingRoomManagerクラスの)インスタンスメソッド getMeetingRoom は、引数として受け取ったミーティングルーム名のインスタンスを返す仕組みになっていて、これによって、プロジェクトからのMeetingRoom(p179)インスタンスへのアクセスを上手に処理できる。

以上でSingletonパターンのまとめを終わりますが、正直、今後の案件で、パッと作るべき仕様を見せられた時に、作例のようなデザインパターンがひらめくかどうかは自信がありません。場数を踏んで、そういう勘所を身に付けないといけませんね。
この作例はサンプルということで管理するデータも少なくなっていますが、大きなプロジェクトになってくると、Singleton×Observerパターンである効率性が高まるのでしょうね。

このエントリーをはてなブックマークに追加
はてなブックマーク - FlashとSingletonパターン

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://www.trick7.com/blog/2007/01/07-082232.php/trackback
Listed below are links to weblogs that reference
FlashとSingletonパターン from trick7

Return to page top