2007年08月13日
ActionScript3 で Singleton
何故か public しか定義できない AS3 のクラスですが、
便利なシングルトンパターンを利用したいケースは多々あります。
AS2 では private でコンストラクタを定義すれば OK だったのですが、
AS3 では許してくれません。。。
皆さんそれぞれのやり方をしている様ですが、
ボクは以下のように実現をしてます。
package {
public class SingletonTest {
// Singleton 生成用キー
private static const SINGLETON_KEY:Function = new Function();
// 唯一のインスタンスを保持する
private static var instance:SingletonTest;
// Singleton の取得
public static function getInstance():SingletonTest {
// プライぺート定数のキーを渡す
if ( !instance )
instance = new SingletonTest( SINGLETON_KEY );
return instance;
}
// コンストラクタ
// 引数が SINGLETON_KEY と一致しなかった場合は Error を throw する
public function SingletonTest(singletonKey:Function=null) {
if ( singletonKey != SINGLETON_KEY )
throw new Error( "SingletonError" );
}
}
関数の参照を定数として保持しているので全体で唯一のものになり、
さらにプライベートでの定義な為に外部からの参照も出来ません。
これにより、生成できるのは SingletonTest.getInstance() のみになる(ハズ...)
ここでは Function をキーに使っていますが、Object でも何でも良いと思います。
23:49|Flex / Flash / AS3 / AS2|0コメント|0トラックバック
このエントリーのトラックバックURL
http://www.extype.com/mt/mt-tb.cgi/711

