ホーム > Flash (ActionScript) > AS3 での Singleton パターン実装

AS3 での Singleton パターン実装

AS3 での Singleton パターン実装はなかなか面倒くさいやり方が多いですが、ちょっとシンプルな実装法を思いついたので紹介します。

ActionScript
package
{
    public class Singleton
    {
        private static var _instance:Singleton = new Singleton();

        public function Singleton():void
        {
            if (_instance)
            {
                throw new ArgumentError("Singleton クラスは外部からインスタンス化できません.");
            }
        }

        public static function get instance():Singleton
        {
            return _instance;
        }
    }
}

※ 08.10.23 追記:
コンストラクタ内部で _instance = this をしていましたが、コメントを受けて修正しました。

内部で最初に new してしまっておくだけなんですが、今まで思いつきませんでした。問題になりそうな点があったらコメントお願いします。

  1. seyself
    2008 年 10 月 23 日 14:36 | #1

    一目見て、おお、なるほど?。って思いました。
    1点だけ疑問なのですが、コンストラクタ内の
    _instance = this;
    って必要なんですか?

  2. admin
    2008 年 10 月 23 日 14:41 | #2

    コメントありがとうございます。
    よく考えたら必要ないですね(汗
    修正しておきます。

  3. 通りすがり
    2009 年 1 月 5 日 18:42 | #3

    単純なケースでは問題ないと思いますが、
    コンストラクタ内で他のstaticなデータにアクセスしている場合に、
    初期化順がよくわからないことになりそうですね。
    (そんな危険なことはやらなければいいだけなのですが、人間やれることはついついやってしまうことも・・)

  4. admin
    2009 年 1 月 5 日 19:26 | #4

    コメントありがとうございます。
    おっしゃる通り、初期化順は把握しにくいですね(というよりクラスが定義された順になる?ので運任せ的)。あと、インスタンスが確実に一個は出来てしまうのも考えものなのかも。

  1. トラックバックはまだありません。