イナヅマTVログ

ActionScript 3, Singleton Pattern Classを作る

| 2件のコメント

ActionScript 3ではconstructorがprivateを使えずpublicが必須条件になってしまった。
そのためActionScript 2で簡単に作成できたSingleton Pattern Class作成に少々ワザが必要になってしまっている。
既に多くの解決法が存在するようだけど、TextMateのAS3 Singleton Pattern templateをもとに考えてみた。

package {
 
public class Singleton extends Object {
 
	//--------------------------------------
	//  SINGLETON CONSTRUCTION
	//--------------------------------------
	private static var _instance:Singleton;
 
	public static function get instance():Singleton
	{
		if (_instance == null){
			_instance = new Singleton();
		}
		return _instance;
	}
 
 
	//--------------------------------------
	//  CONSTRUCTOR
	//--------------------------------------
	public function Singleton()
	{
		super();
		if( _instance != null ) throw new Error( "Error:Singleton already initialiszed." );
		if( _instance == null ) _instance = this;
	}
 
}
 
}

update
インスタンス作成。
var single:Singleton = new Singleton()
または
var single:Singleton = Singleton.instance;

インスタンス作成後
new Singleton();
すると
throw new Error
が実行され、コンパイルエラーになる。

インスタンスが必要なら
Singleton.instance;
でインスタンスを取得し使用する。

EventDispatcherを継承したEventをオブザーブするクラスを作ると便利、だと思う。

2件のコメント

  1. はじめまして。

    ちょっと気になったことがあります。これだと Singleton.instance する前だったら、一度だけ new できるような気がします。勘違いだったらすいません。

  2. コメントありがとうございます。

    説明が足りませんでした。
    Singleton.instance する前だったら new Singletonは可能です。
    ですが、作られるインスタンスは常に1つにしかならないのではないかと思います。

    newが全くできないようにする方法があるのは承知しています。
    もうちょっと制約を緩くしてnewもできてSingleton.instanceもできるとイイかなと思ってます。

コメントを残す

必須欄は * がついています