diary_detail
HOME » スタッフブログ » developerのブログ » flashでSingleton?

flashでSingleton?

2010年6月18日

Author : developer

最初に断っておきますが、これは独り言であって解決策ではありませんので悪しからず。

AcrionScript歴が浅いので、時間がある時にflexのソースを眺めたりしてます。
そんな時に見つけたクラスが「mx.core.Singleton」
[ExcludeClass]のメタタグが定義されているので入力補完では出てこないです。

元々javaやっていてasをやるようになったので、javaでは出来たのにasでは
出来ないことがあって困ることがあります。逆に出来て便利なこともありますけど。

一番困るのはメソッドのオーバーロードが出来ないこと。でもこれは今回の内容では
ないので置いといて、コンストラクタがpublicでしか宣言できないってこと。
staticメソッドだけで構成されるutilクラスとかで、インスタンスを生成する必要ないから
コンストラクタを隠蔽するってことができない。これに関しては別に大した問題じゃないですが。

困るときってのが、Singletonパターンでクラスを作りたいとき。
普段デザインパターンとか意識していない自分でも、たまに使うのがSingleton。
コンストラクタをprivateにしたいけどAcrionScriptでは残念ながらできず、
他からインスタンスを生成された場合は例外を投げるとかして擬似的に実装するしかない。
(もっとうまいやり方あるかもだけど)

で、最初に書いたmx.core.Singletonクラスってのを見つけて、これは何らかの解決策に
なるのかと思い、何をやっているクラスかって見てみたら、flexの中で使われている
Singletonの擬似的な実装方法みたいで、中では単純にstaticなmap変数でクラスの出し入れを
しているだけ。実際に登録されるクラスはSingletonよろしくgetInstanceというpublic static
メソッドで、private static変数で保持しているインスタンスを戻しているみたい。
このクラス達は普通にnewすればインスタンスを生成できちゃいそうです。
なので、mx.core.SingletonクラスはSingletonというよりはFactoryっぽいのかな?
そんな訳で、Singletonについては何の解決もせず。

きちんと統制の取れたプロジェクトならルールとしてインスタンス生成時の方法を提示して
複数生成しないようにすればいいんですが、バラバラに開発しているプロジェクトとかだと
勝手にインスタンスを生成されちゃったりしたら困るよなぁ・・・という独り言でした。

calendar

2010年6月の日記

site search