可能性の重複:
What is so bad about singletons?シングルトンパターンを使用していないのはなぜですか?
私はシングルトンを使用すると、落胆と悪であることを オーバーフローに関する質問をスタックにいくつかの答えを読みました。何故ですか?
可能性の重複:
What is so bad about singletons?シングルトンパターンを使用していないのはなぜですか?
私はシングルトンを使用すると、落胆と悪であることを オーバーフローに関する質問をスタックにいくつかの答えを読みました。何故ですか?
クラスがインスタンス化される回数は、クラス自体によって決まるのではなく、単一のインスタンスを提供するインフラストラクチャから決定されるべきです。シングルトンはこの決定をインフラストラクチャに任せることは不可能です。これは再利用性の問題であり、単体テストなどに表示されますが、インフラストラクチャが特定の目的のために別のインスタンスを提供しようとした場合にも表示されます。
(例:そこだけ1つのデータベース接続がある。しかし、別のデータベースからデータをインポートするために、それは別の接続が必要です。データベース・アクセス・サービスはシングルトンになる場合、別の接続をオープンすることは不可能である。)
シングルトンパターンは、グローバル状態をアプリケーションに導入するため、単体テストをはるかに難しくします。このパターンは、マルチスレッドコンテキストにおけるシングルトンへのアクセスを、例えばロックによって直列化しなければならないため、プログラム内の並列性の可能性を低減することにも留意されたい。
依存性注入の支持者は、これを主に個人的および静的な方法の使用のために、アンチパターンとみなします。
JavaやPHPなどの言語でのリフレクションなどの方法を使用してシングルトンパターンを分解する方法を提案しているものがあります。
簡単な答えは、あなたのコードにグローバル状態のオブジェクトを導入することです(複雑さを増す可能性があります)。
シングルトンは、あなたが知っているべき、他の欠点がないわけではない。
http://en.wikipedia.org/wiki/Singleton_pattern#Drawbacks
この記事はもう少し冗長です:
http://code.google.com/p/google-singleton-detector/wiki/WhySingletonsAreControversial
理由は、彼らは「はおそらく基本的にはglobal variablesです。それでも、いくつかの環境では非常に幅広く使用されています。たとえば、長時間実行されるWebサービス。 Javaには例えばSpring Frameworkがあり、デフォルトのBeanタイプはシングルトンです。コントローラ、サービス、およびDAOのオブジェクトはシングルトンです(フレームワークがインスタンスを1つだけインスタンス化するという意味で)。それらは、ロックを必要とせず、慣習的にステートを含まないためスレッドセーフでもあります。通常、要求コンテキストが渡され、コントローラ/サービス/ DAOがそれを処理します。
http://en.wikipedia.org/wiki/Singleton_pattern#Drawbacks –
's/Potential/Blatant、exact /' –