Singleton
Catalystの勉強絡みでDBIx::Class::Schema::Loaderについて、いろいろしていたら、「シングルトン」という単語に行き当たった。
これまでも見たことはあったけど、後回しにしていて、意味が分からなかったのでようやく調べた。
参考:
Singleton パターン - WikipediaTÅàí©é tø«fUCp^[@æ2Í tø«J^O@WbNÒ@SingletoniVOgj
要するにクラスから作ることができるインスタンスは一個だけ、グローバル変数的、あるいは、一個だけのキャッシュという感じのデザインパターンのようだ。
そう、デザパタ。
でこれまたどっかで見たことあるな、とデザインパターンで引っかかったのだけれど、例のごとくというか、「モダンPerl入門」だった。
理解できなくても頭の隅に残っていて、理解の一端になったと喜ぶべきなのか、それくらい一般常識なんだから覚えておけよ自分、みたいに悲しむべきなのか…。
まあ次に活かせればそれでよいか。
package MySingleton; my $SINGLETON; sub new { if ($SINGLETON) { return $SINGLETON; } else { my $class = shift; $SINGLETON = bless { @_ }, $class; return $SINGLETON; } }
一度作ったインスタンスはクラス変数として保持、再度コンストラクタが起動されたら、そのクラス変数に保持したインスタンスを返却する。
Moose使ってるなら、MooseX::Singletonをuseするだけ。簡単。