物欲とその仲間たちの記録 -かめっこの物欲まかせな暮らしぶり-

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:49Flex / Flash / AS3 / AS20コメント0トラックバック

トラックバック

このエントリーのトラックバックURL
http://www.extype.com/mt/mt-tb.cgi/711

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)