ActionScript 3.0 では、コンストラクタを、private 宣言することができません。 そのために、Singleton なクラスを作るためには、若干の工夫が必要です。 以下は、適当なインターナルクラスを定義しておいて、このインスタンスを使わないと、コンストラクタが呼べないようにするというもの。 {{{ package com.kujirahand.utils { public dynamic class KGlobal { public function KGlobal(key_obj:KGlobalSingletonClass) { if (!(key_obj is KGlobalSingletonClass)) { throw Error("KGlobal is Sigleton."); } init(); } private static var _instance:KGlobal = null; public static function get g():KGlobal { var g:KGlobal = KGlobal._instance; if (g == null) { g = new KGlobal(new KGlobalSingletonClass); KGlobal._instance = g; } return g; } public static function getInstance():KGlobal { return g; } private function init():void { // init } } } internal class KGlobalSingletonClass {} // for singleton }}} かなり、凝ったコードだけど、結局は、throw Error() を使って、シングルトンであることを外部に通知しています。そのため、もっと簡略化しても同じなのでは、と思って調べてみたら、みんな似たり寄ったりなことをしていました。 以下は、private なオブジェクトを定義しておいてクラス生成のためのキーにしています。キーが合わないとエラーを出すというもの。結局、throw Error()を使うという部分は同じ。 {{{ package com.kujirahand.utils { public dynamic class KGlobal { private static var _SINGLETON_KEY:Object = {}; public function KGlobal(key_obj:Object) { if (key_obj != _SINGLETON_KEY) { throw Error("KGlobal is Sigleton."); } init(); } private static var _instance:KGlobal = null; public static function get g():KGlobal { var g:KGlobal = KGlobal._instance; if (g == null) { g = new KGlobal(_SINGLETON_KEY); KGlobal._instance = g; } return g; } public static function getInstance():KGlobal { return g; } private function init():void { // init } } } }}} どちらかといえば、こちらの方が見た目に分かりやすいと思いましたが、好みの問題でしょうか。