この質問で時間を無駄にしないでください。フォローアップ:シングルトンの何がそんなに悪いのか?
お気軽にSingletonでビッチしてください。
Singletonを不適切に使用すると、多くのペイントが発生する可能性があります。シングルトンでどのような問題が発生しましたか? このパターンの一般的な誤用は何ですか?
Corey の回答を掘り下げた後、このトピックに関するいくつかの素晴らしい記事を発見しました。
この質問で時間を無駄にしないでください。フォローアップ:シングルトンの何がそんなに悪いのか?
お気軽にSingletonでビッチしてください。
Singletonを不適切に使用すると、多くのペイントが発生する可能性があります。シングルトンでどのような問題が発生しましたか? このパターンの一般的な誤用は何ですか?
Corey の回答を掘り下げた後、このトピックに関するいくつかの素晴らしい記事を発見しました。
場合によっては、コードベースのさまざまな部分から名前で直接参照されるシングルトン クラスとコードがより緊密に結合されることがあります。したがって、たとえば、コードの一部をテストする必要があり、コードの別の部分からシングルトンを参照する場合、モック オブジェクトでその依存関係を簡単に偽造することはできません。
Singleton パターンに本質的な問題はありません。これはツールであり、時には使用する必要があります。
シングルトン自体には何も問題はなく、パターンとして、特定のオブジェクトを一度だけ作成する必要性を認識する上で重要な役割を果たします。
それが頻繁に使用されるのは、グローバル変数のスティグマを回避する試みとしてのグローバル変数の婉曲表現であり、本質的に間違っているのはこの使用です。グローバル変数がたまたま正しい解決策である場合、シングルトンを使用しても改善されません。グローバル変数を使用することが (かなり一般的であるように) 正しくない場合、それをシングルトンでラップしてもそれ以上正しくはなりません。
私は他のポスターほどシングルトンに触れていませんが、私が見た (C# での) ほぼすべての実装は、静的クラス/メソッドで実現できたはずです。静的クラスはシングルトン パターンの実装であると主張できると思いますが、それは私が見てきたものではありません。本当に必要なのは static キーワードを使用することだけだったのに、これらの Singleton クラス/オブジェクトを構築して管理する人々を見てきました。
したがって、Singleton パターンが悪いとは言いません。銃のようなものだと思います。銃が悪いとは思いませんが、不適切に使用される可能性があることは間違いありません。
より適切な質問は次のようなものだと思います: SIngleton パターンの使用が不適切なのはどのような状況ですか? または、すべきではないシングルトンを使用するものを見たことがありますか。
基本的に、シングルトンは静的データを持ち、実際には静的ではないふりをする方法です。
もちろん使っていますが、乱用しないようにしています。
元の GoF 設計の基本的な問題の 1 つは、デストラクタが保護されていないことです。シングルトン インスタンスへの参照を持っている人は誰でもシングルトンを自由に破棄できます。
John Vlissides の最新情報「To Kill A Singleton」を参照してください。
乾杯、
ロブ
私が目にするシングルトン パターンのほとんどは、スレッド セーフな方法で書かれていません。正しく書かれていれば、それらは役に立ちます。