よみがえるSingleton

もう少し引っ張るSingleton。
Modern C++ DesignにもC++におけるSingletonの実装の話が載っている。

GoF本におけるSingletonの説明を単純化すると「あるクラスのインスタンスがたった1つになることを保証し、それに対する大域的なアクセス・ポイントを提供する」ということになります。
Singletonはグローバル変数を改良したものです。

本書ではSingletonの寿命に関する実装に詳しく触れられており、
実際のSingletonの実装に「正解はない」としながらも、
実装上の様様な問題点を挙げて解説している。
インスタンスを破棄した後にも復活するPhoenix Singletonなんてものまで出てくるが、
要するにこれらは「Singletonが1つのインスタンスを保証するが故に生ずる問題点」である。
が、恐らく巷で求められているのは「大域的なアクセス・ポイント」の側面だろうという事が出来る。

例えばGamePadなるクラスがあった場合、これらのインスタンスは恐らく1つである事が分かる。
(複数のパッドに対応する為に複数のインスタンスがあるデザインでも構わないけれどもManager的なものは1つのインスタンスになるだろう)
で、これにアクセスする場合、

void App::mainLoop()
{
    if (GamePad::GetInstance().getPad(0).isPushButton(GamePad::PAD_A)) {
        ...
    }
}

という感じで書いてしまう事もできる。
でも、これを違った形で設計できないものだろうか?

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)

  • 作者: アンドレイアレキサンドレスク,Andrei Alexandrescu,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2001/12
  • メディア: 単行本
  • 購入: 9人 クリック: 194回
  • この商品を含むブログ (99件) を見る