- 2007-01-07 (日)
- action script
Singleton(シングルトン)パターンは、インスタンスを絶対に1つしか持たないクラスを設計し、そのインスタンスにプロジェクト内のデータ管理を一極集中でマネージメントさせる手法。
まぁ管理するほどデータが多くない場合や、p172, 173のような擬似Singletonパターンでも、力技的でアリといえばアリなのだけど、やはりSingletonパターンを採用する理由を挙げるならば、唯一の存在であると保証されているインスタンスでデータ管理することの安心感を、制作者本人だけでなく、プロジェクトメンバーの共通認識として保障しておけるのがメリットな感じです。あと、コードもスマートですし。
クラス設計の考え方の核となるのが、p176のコード。
- まず、コンストラクタは private にしておくことで、外部からインスタンス生成できないようにブロックしておく。
- じゃあどうやって生成するのよ?ということで、 public で static なgetInstanceメソッドを用意。publicなので、flaや他asファイル等からの呼び出しが可能。static宣言により、クラスメソッド扱いになるので、var mySingleton:Singleton = Singleton.getInstance(); と呼び出せます。
- getInstanceメソッド内部では、Singletonインスタンスが既に存在しているかどうかをチェックし、存在していなければインスタンス生成、存在してれば作らないことを保障してくれます。存在判定にはコード先頭で定義しておいた private で static なSingletonインスタンス参照(変数名:instance)を利用。これはクラスファイル外からはコントロールできないので、偽装される心配はありません。
次に、p177からは実用例を紹介。Observerパターンで作った「参加者リスト表示サンプル」を発展させ、参加者が出席する複数のミーティングルームをSingletonインスタンスで管理するサンプルを作成する。
データホルダーとしてSingletonインスタンス(あとで作るflaで、myMeetingManagerと命名)を利用。そのインスタンスに、{name,instance}のオブジェクトを要素として格納する配列 meetingRooms を定義する。
(作例ではMeetingRoomManagerクラスの)インスタンスメソッド getMeetingRoom は、引数として受け取ったミーティングルーム名のインスタンスを返す仕組みになっていて、これによって、プロジェクトからのMeetingRoom(p179)インスタンスへのアクセスを上手に処理できる。
以上でSingletonパターンのまとめを終わりますが、正直、今後の案件で、パッと作るべき仕様を見せられた時に、作例のようなデザインパターンがひらめくかどうかは自信がありません。場数を踏んで、そういう勘所を身に付けないといけませんね。
この作例はサンプルということで管理するデータも少なくなっていますが、大きなプロジェクトになってくると、Singleton×Observerパターンである効率性が高まるのでしょうね。
- Newer: FlashとDecoratorパターン
- Older: FlashとObserverパターン
Comment:0
Trackback:0
- TrackBack URL for this entry
- http://www.trick7.com/blog/mt-tb.cgi/444
- Listed below are links to weblogs that reference
- FlashとSingletonパターン from trick7.com blog




