ActionScript 3 らしく書いてみたシングルトンのサンプル

Java ライクなシングルトンのサンプルが多いので自分なりに ActionScript らしく書いてみました。

AIR 2 の flash.filesystem.StorageVolumeInfo - Adobe® Flex® 4.1 リファレンスガイド クラスのシングルトン実装が良さそうなのでこれを参考にしてみました。

  • StorageVolumeInfo は静的な storageVolumeInfo プロパティでシングルトンインスタンスを提供している。
  • new StorageVolumeInfo() すると、ArgumentError #2012 例外が投げられるようになって-いる。
package
{
  import flash.utils.getQualifiedClassName;

  /**
   * シングルトンのサンプル
   */
  public class SingletonSample
  {
    private static var _instance:SingletonSample = new SingletonSample();
    
    /**
     * シングルトン提供プロパティ名をクラス名のLowerCamelにする
     */
    public static function get singletonSample():SingletonSample {
      return _instance;
    }
    
    public function SingletonSample()
    {
      if (_instance) {
        throw new ArgumentError(getQualifiedClassName(this) + " クラスをインスタンス化することはできません。");
      }
      
      // 初期化処理
      _name = "sample name";
    }
    
    private var _name:String;
    
    public function get name():String {
      return _name;
    }
  }
}

インスタンス変数を初期化時に生成しています。使用頻度によっては最初の参照時に生成した方が良いでしょう。

サンプルクラスの使用例

var ss:SingletonSample = SingletonSample.singletonSample;
trace(ss.name);
// "sample name" と出力