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点だけ疑問なのですが、コンストラクタ内の
_instance = this;
って必要なんですか?
コメントありがとうございます。
よく考えたら必要ないですね(汗
修正しておきます。
単純なケースでは問題ないと思いますが、
コンストラクタ内で他のstaticなデータにアクセスしている場合に、
初期化順がよくわからないことになりそうですね。
(そんな危険なことはやらなければいいだけなのですが、人間やれることはついついやってしまうことも・・)
コメントありがとうございます。
おっしゃる通り、初期化順は把握しにくいですね(というよりクラスが定義された順になる?ので運任せ的)。あと、インスタンスが確実に一個は出来てしまうのも考えものなのかも。