[解決済み] なぜSingletonはアンチパターンと言われるのか?重複
疑問点
重複の可能性があります。
シングルトンの何がそんなに悪いのですか?
最近、Singletonはアンチパターンだと聞いたことがあります。クラスをシングルトンにすることは、そのユニークなインスタンスをグローバル変数にするようなものだということと関係があるのでしょうが、それ以上のこと(そのオブジェクトのインスタンスの数を制限する、インスタンス化を管理する、などなど)もやっているのですよ。
なぜシングルトンはアンチパターンと見なされるのでしょうか?また、その代替案は何でしょうか?
どのように解決するのでしょうか?
回答に役立つように、アンチパターンのコメントについて詳しく説明します。
使いすぎです。 クラスの唯一のインスタンスが実際に必要とされない状況で、不必要な制限を導入します。 アプリケーションにグローバルな状態を導入してしまう
からです。 http://en.wikipedia.org/wiki/Singleton_pattern
これについては、以下をご覧ください。 https://www.michaelsafyan.com/tech/design/patterns/singleton
上記のブログの素晴らしい結末をご紹介します。
要するに、シングルトンパターンはコードをより複雑にし、有用性を低下させるのです。 そして、再利用やテストが本当に苦痛になります。シングルトンを排除することは しかし、それは価値のある努力です。
なるほど、アンチパターンである理由はこの段落によく書かれていて、著者が表現しているように、コードをシングルトンに強固に結合してしまうのですね。
シングルトンを使いたいということがわかったら、設計を検討したほうがいいかもしれませんが、便利な場合もあります。
たとえば、かつて私は、何千ものリクエストを処理するために、せいぜい1つのデータベース接続を持つことができるアプリケーションを書かなければなりませんでした。 そのため、1つのインスタンスしか持てないというリソースの制約があるため、シングルトンは理にかなっています。
しかし、一般的に、これはコードを単純化するために使用され、導入される難しさについては考えません。
例えば、これは静的クラスにも当てはまりますが、ユニットテストや並行処理がある場合、あるリクエストの状態が変更され、インスタンスを呼び出すクラスが状態が期待通りであると仮定するため、問題が発生する可能性があります。
使い方にチャレンジするのは、プログラムがマルチスレッドになった場合の処理を考えることだと思いますが、簡単な方法としては、一度に複数のテストを実行するのであれば、ユニットテストを行うことだと思います。
それでも必要だとわかったら、使うが、後で発生する問題を認識することだ。
関連
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み】C++ シングルトンデザインパターン
-
[解決済み】Singleton。どのように使用するべきか
-
[解決済み】アンチパターンとは何ですか?
-
[解決済み】インターフェイスを作成するタイミングはどのように判断するのでしょうか?
-
[解決済み] Facade、Proxy、Adapter、Decoratorのデザインパターンの違い?
-
[解決済み] BridgeパターンとAdapterパターンの違い
-
[解決済み】C++でファクトリーメソッドパターンを正しく実装する方法
-
[解決済み] StrategyパターンとDependency Injectionの違いは何ですか?
-
[解決済み] ユーティリティクラスは悪なのか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シングルトン・パターンの欠点やデメリットは何ですか?[クローズド]
-
[解決済み】MVCにおけるビジネスロジック【終了しました
-
[解決済み】ファサードデザインパターンとは何ですか?
-
[解決済み] テンプレート方式とストラテジーパターンの違いは何ですか?
-
[解決済み] Angular 2でシングルトンサービスを作成するには?
-
[解決済み] BridgeパターンとAdapterパターンの違い
-
[解決済み】デザインパターンを勉強するには?[クローズド]。
-
[解決済み] FacadeパターンとAdapterパターンの違いは何ですか?
-
[解決済み] StrategyパターンとDependency Injectionの違いは何ですか?
-
[解決済み] ユーティリティクラスは悪なのか?[クローズド]