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をオブザーブするクラスを作ると便利、だと思う。
2008.10.17 18:24
はじめまして。
ちょっと気になったことがあります。これだと Singleton.instance する前だったら、一度だけ new できるような気がします。勘違いだったらすいません。
2008.10.17 19:11
コメントありがとうございます。
説明が足りませんでした。
Singleton.instance する前だったら new Singletonは可能です。
ですが、作られるインスタンスは常に1つにしかならないのではないかと思います。
newが全くできないようにする方法があるのは承知しています。
もうちょっと制約を緩くしてnewもできてSingleton.instanceもできるとイイかなと思ってます。