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