[AS]デザインパターン シングルトンパターンの使い方
製作なんてどうせ1人でやるから、Singletonなんて特に決めなくても、自分で覚えてるからいいや、と思ってました。
が、改めて、書籍:ActionScript3.0デザインパターンに書かれているSingletonの基本ソースを見て目からうろこが。。。
Singleton以外のところで感動したのでメモ。
今までのかなり無駄なことをしてたかも。
まずはSingletonクラスの基本ソース
package {
/**
* ...
* @author 393
*/
public class SingletonModel{
//自身をクラスメンバーとすることでどこからでもアクセスできるようにする。
private static var instance:SingletonModel;
//SingletonEnforcerを引数とすることで外からインスタンス化をできないように。
//※ただ、引数にnullを設定すれば外からでもインスタンス化できちゃうけど
public function SingletonModel(enforcer:SingletonEnforcer) {}
//このメソッドでSingletonModelのインスタンス(instance)の参照を取れる
public static function getInstance():SingletonModel{
//SingletonModel.instanceが生成されてなければ生成してから、
if (!SingletonModel.instance){
SingletonModel.instance = new SingletonModel(new SingletonEnforcer());
}
//returnでインスタンスを返す
return SingletonModel.instance;
}
}
}
class SingletonEnforcer {}
なにが目からうろこだったかって、自分自身をクラスメンバーとして保持するという方法。
これなら、どこのクラスからでも直接参照が取れるから、インスタンスの参照を持ちまわらなくてもいいのよね。
今までは、データモデルとなるようなクラスを、他のクラスに参照渡しても持ちまわってた。
これは一応上記書籍のMVCパターンを参考にしてたのだけど、MをSingletonにしちゃえば、VとかCをインスタンス化するときにわざわざ参照渡さなくてもいいじゃないのかな。
でも全部そうしちゃったらなんか落とし穴もありそうなきもするけど。
とりあえず、こんど使ってみる。
Tweet