0

これが以前に尋ねられたかどうかはよくわかりません。

言語はC++です。いくつかのデータを保持し、すべてのオブジェクトで共有する必要がある 1 KB のバッファーなど、静的な動作を行う必要がある多数のデータ項目を持つクラスを作成しています。私の上司は、シングルトン クラスを作成して、すべてのデータ項目をその中に入れてみませんか?と私に尋ねました。

私はシングルトンでいくつかの苦い経験を​​しており、最近、「シングルトンは悪です」とグーグルで検索し、いくつかの記事を読みました。SOでも同じことを読みました。したがって、上記のケースでシングルトンを使用するのは少しためらいました。実際には必要ないと思うからです。そこで私は上司に、クラスをシングルトンにする代わりに、必要なデータ項目に静的データ メンバーを使用してもよろしいでしょうか?と尋ねました。しかし、彼は明確な答えを私に与えず、私に、デザインパターンは生活を楽にするためにあるので、それを使用することの問題は何なのかを教えてくれました. 私は彼と議論したくありません。:)

私は OOP の専門家ではありません。したがって、誰かがより理にかなったポイントについてコメントできると助かります[また、両方が間違っているかどうか:)]。

ありがとう...

4

1 に答える 1

2

シングルトンは本質的に、グローバル変数の周りの OO カプセル化に他なりません。

状態を何らかのクラスにカプセル化し、それを静的メンバーとして情報を必要とするクラスに追加するだけでは、少なくとも 2 つの欠点があるだけで、実際にはシングルトンと大差ありません。

  • その状態を他のクラスと共有することはできません。
  • 単純な実装では、誰かが新しいクラスの別のインスタンスを作成するのを止めるものは何もありません。それが意味的に無効である場合は、コードで許可しないでください。つまり、シングルトン機能をすべて記述する必要があります。

確かに、グローバルにシングルトン マジックを少し適用するだけでは、グローバル状態の問題が解消されるわけではありません。その意味で、シングルトンは悪です™。ただし、モデルにグローバルな状態が必要な場合があります。カプセル化は、誰が、いつ、どのように変更するかを制御できるため、このような場合に適しています。たとえば、シングルトン ファクトリ メソッドを特定のクラスのみがアクセスできるようにすることができます。

于 2013-01-31T12:15:55.360 に答える