ActionScript3.0でのSingletonについて
ActionScript3.0を最近いじる機会があったのですが、ActionScript3.0でSingletonを実装しようとしたら「コンストラクタはpublicでなくちゃだめ☆」と怒られてしまいました。
でその解決策ですがこんな方法があるようです。
//Singleton.as package{ class Singleton{ private var m_cSingleton:Sigleton; public function Singleton(cSingletonBlock:SingletonBlock){ if(cSingletonBlock == null){ throw new Error("getInstanceを使ってね☆"); } } public static function getInstance():Singleton{ if(m_cSingleton == null){m_cSingleton = new Singleton(new SingletonBlock())} return m_cSingleton; } } } class SigletonBlock{}
とまあこんなかんじ。
要は外部から読めないクラス(ここではSingletonBlock)を引数に指定することで、外部からコンストラクタを呼び出すことを防止しているのである。
にしても…
Adobeはなぜprivateを禁止したのだろう?