プログラミングやる前に先お風呂はいっちゃいなさい

69月/080

Code Hilighter のテスト中

ソースコードのハイライト表示プラグインを入れたのでテストもかねて、ActionScript3でのSingletonの実装の仕方を書きます。
ちなみに、入れたプラグインはWP-Syntaxです。

これは以前のはてなのブログにポストした内容と同じです。

ActionScript3 で Singleton を実装してみた

さて、ActionScript3 ではprivateなコンストラクタが作れないので、コンストラクタの封印ができません。
つまり、コンパイルエラーでSingletonのコンストラクタ呼び出し禁止を規制できません。

ということで、妥協して、コンストラクタを呼んだ場合は実行時エラーが出るようにします。
コンストラクタ呼びまくってる奴、涙目wwww

実装するなら、こんなコードです。

public class Singleton
{
 private static var _instance = new Singleton();
 public function Singleton()
 {
  if (_instance != null)
  {
   throw new Error("Singleton::getInstanceを使ってくだしあ");
  }
  // TODO: 初期化処理を記述
 }
 
 public static function getInstance():Singleton
 {
  return _instance;
 }
}

初期化されたかどうかは、内部のインスタンスがちゃんと生成されているかどうかで判断してみた。

こんな風に書けば、最初にSingletonクラスにアクセスされた時点で

private static var _instance = new Singleton();

がちゃんと最初に呼び出されます。
恐らく、注意すべきはこのSingletonクラス内の他のstatic変数の初期化処理。

予想では多分、上から実行されるはずなので、インスタンスの生成の前に他の変数の初期化処理を書くのは意図しない結果になる可能性があります。

はーい、以上です。