私は OO Design の初心者で、Singleton デザイン パターンの使用について疑問に思っています。シングルトンが悪い理由についての記事をいくつか読みましたが、シングルトンが必要かどうかはまだわかりません。なるべく避けたいところです。
私の場合、C++ で API を介して制御および参照できる OceanOptics Spectrometers を使用しています。
分光計を管理するすべてのコード (検出、パラメーターの設定または取得、データの取得) を 1 つのクラスにまとめましたSpectrometerProxy
。
そして、このクラスがシングルトンであるかどうかを知りたいです。それを正当化できる理由がいくつかあると思います。
ハードウェアを管理します
分光器の数に関係なく、このクラスを通じてすべて制御および参照されます
正確な順序で 1 回だけ実行する必要がある特定の手順があります (分光計を開き、いくつかの変数をチェックし、プログラムが停止したときに分光計を閉じます)。
次に、このクラスをシングルトンにするよりも良い実装方法があるかどうかはわかりません。私が考えたもう1つの解決策は、それを通常のクラスとして保持し、コピーを防止し(コピーコンストラクターと代入演算子をプライベートに宣言することにより)、それを必要とするクラスへのポインターを渡すことでした:それは複数の作成を妨げませんSpectrometerProxy
。それを避けたい。
また、すべてを静的にすることも考えましたが、クライアントコードに依存して正しい静的メンバー関数を正しい順序で呼び出すことになり (分光計への接続を正しく閉じることを忘れないでください)、エラーが発生しやすくなります。 RAII の原則に反します。
では、シングルトンはこの問題に対する適切な設計アプローチになるのでしょうか、それとも除外して他の方法を探すべきでしょうか?