Updated at: 2014-11-04

デザインパターンの咀嚼

シングルトン

真理

  • 「1 つであることを保証したい」場合にのみ使うべき
  • 「1 つであることを保証したい」ケースはそう多くない

考察

  • すぐシングルトンって言う人には疑ってかかるようにしている
  • 一見初心者にとって分かりやすいので、とにかく グローバル変数の免罪符 となりがち
  • グローバルなものは思わぬ影響を及ぼす / ライフサイクルを管理しづらい / テストしづらい などの観点でマイナス面が大きい

  • 「1 つしかないからシングルトンで」と初心者は考えがちだが、 それは 「本当に 1 つでなきゃいけないもの」 だろうか?
    • 例えばスクリーンの描画を管理するマネージャはシステムに 1 個しかなさそうに見えるが、 マルチ画面のゲームを作るときに 2 個インスタンスを作れた方が便利かもしれない
    • ファイルシステムなども、別にシステムが複数のファイルシステムを持ったっていい

  • 1 つであることを保証したい例は、イベントキューみたいな「複数がリソースを共有するもの」などかな
  • あとまあリソースをキャッシュするために使う、というのも分かる。 ただこれもキャッシュ機構が static になっていればよいケースが多い

  • グローバルなアクセス手段を得るなら、インスタンスを static に置く方が扱いやすい
    • またはグローバルをまとめたインスタンスを引き回す

参考