誰もがなぜシングルトンがオープン/クローズドな原理を破るのか教えてもらえますか? そのクラスから継承することに問題がある可能性があるためですか?なぜシングルトンがオープン/クローズの原理を破るのですか?
1
A
答えて
3
クラスを「オープン」にするには、クラスを継承する必要があります。継承は「is-a」関係です。シングルトンクラスから継承した場合、子クラスのインスタンスも "is-a"関係のため親クラスのインスタンスになります。つまり、突然シングルトンクラスのインスタンスを複数持つことができます。
シングルトンクラスが継承を禁止する場合は、もはや「オープン」ではありません。
シングルトンクラスは継承でき、そして拡張のための「オープン」であるならば、それはもはやシングルトンパターンを強制することはできません。
1
Singletonパターンには二つの問題があります。
- は他がそれに強い依存関係を持っていながら、シングルトンクラス自体は、そのインスタンスの作成を制御しているので、それは開放/閉鎖原則を破ります。これにより、アプリケーション全体で徹底的な変更を行うことなく、実装を別のもので変更することができなくなります。
- これは、コンシューマが常にインスタンスを取得するためにコンクリートクラスに依存するため、依存性の逆転原理を破りますが、DIPでは抽象化に依存する必要があると述べています。これにより、シングルトン実装がドラッグされ、実装をデコレータにラップするか、シングルトン実装なしでクライアントを配布することで、クロスカッティングの問題を追加することができなくなります。
関連する問題
- 1. シングルトンが破壊される
- 2. クローニングがシングルトンを破壊する方法
- 3. JavaFXシングルトンはなぜですか?
- 4. タッチイベントがAndroidフレームレートを破壊するのはなぜですか?
- 5. MapPageRouteがHtml.Beginformアクションを破損するのはなぜですか
- 6. なぜコードがjsfiddleで破損するのですか
- 7. なぜ組成はオープンクローズド原理に従うべきですか?
- 8. CBIでABIが破損する原因は何ですか?
- 9. 原子アイオエディターが遅すぎるのはなぜですか?
- 10. Mvc MaproutesがDRYの原則を破るように見える理由
- 11. データベーステーブルが破損しているのはなぜですか?
- 12. シングルトンがActionScriptの文化に浸透するのはなぜですか?
- 13. なぜStruts2のActionクラスにシングルトンの概念がないのですか?
- 14. なぜDialogFragmentが破壊されていないのですか?
- 15. シングルトンでチェーンを破る場合のPHPの返り値配列
- 16. これが原因でファイルが空になるのはなぜですか?
- 17. Jettyのクロスオリジンフィルタが原因でサーバーがクラッシュするのはなぜですか?
- 18. シングルトンのNSAssert:なぜこのコードは有効ですか?
- 19. なぜ私のアクセサがインラインでコードを破壊するのですか?
- 20. Grailsサービスクラスがシングルトンである理由
- 21. シングルトンHttpClientの処理
- 22. スペースセレクタの中にカンマセレクタを置くのがなぜ親を破るのですか?
- 23. なぜ `position:absolute;` `vertical-align:middle`を破壊するのですか?
- 24. なぜ "wm_protocol"はPython3/tkinterの通常のウィンドウ管理を破りますか?
- 25. なぜポインタ演算がsegfaultの原因ですか?
- 26. これが原因でサーバーがタイムアウトするのはなぜですか?
- 27. java8ストリームマップが原因でConcurrentModificationExceptionが発生するのはなぜですか?
- 28. これが原因でメモリリークが発生するのはなぜですか?
- 29. 56890ポートが原因でcurlコマンドが失敗するのはなぜですか?
- 30. スラッシュ文字が原因でセレクタが失敗するのはなぜですか?
シングルトンはこれらの問題を解決するためのインターフェイスを実装できませんでしたか?インタフェースは拡張のために開いたままですが、インタフェースに依存するクライアントは、抽象化の背後にあるシングルトンインスタンスを使用していることを知る必要はありません。 – jaco0646
インタフェースを持ち、 'Instance'が置換可能な場合、これはシングルトンパターンではなく、静的クラスに' Instance'プロパティが定義されているため、DIPが違反します。 – Steven