Updated at: 2014-11-04
デザインパターンの咀嚼
シングルトン
真理
- 「1 つであることを保証したい」場合にのみ使うべき
- 「1 つであることを保証したい」ケースはそう多くない
考察
- すぐシングルトンって言う人には疑ってかかるようにしている
- 一見初心者にとって分かりやすいので、とにかく グローバル変数の免罪符 となりがち
- グローバルなものは思わぬ影響を及ぼす / ライフサイクルを管理しづらい / テストしづらい などの観点でマイナス面が大きい
- 「1 つしかないからシングルトンで」と初心者は考えがちだが、
それは 「本当に 1 つでなきゃいけないもの」 だろうか?
- 例えばスクリーンの描画を管理するマネージャはシステムに 1 個しかなさそうに見えるが、 マルチ画面のゲームを作るときに 2 個インスタンスを作れた方が便利かもしれない
- ファイルシステムなども、別にシステムが複数のファイルシステムを持ったっていい
- 1 つであることを保証したい例は、イベントキューみたいな「複数がリソースを共有するもの」などかな
- あとまあリソースをキャッシュするために使う、というのも分かる。 ただこれもキャッシュ機構が static になっていればよいケースが多い
- グローバルなアクセス手段を得るなら、インスタンスを static に置く方が扱いやすい
- またはグローバルをまとめたインスタンスを引き回す