静的クラスよりもシングルトン設計パターンが優先されるシナリオと、シングルトン設計パターンよりも静的クラスが優先されるシナリオは何ですか?
7 に答える
これは実際にはどちらかまたはシナリオではありません。
シングルトンは、静的ゲッターとプライベート コンストラクターを持つインスタンスです。それらは静的クラスではありません。
特定の条件付きのシングルトンは、クラスのインスタンスが 1 つだけであることを保証する方法です。
では、最初の質問です。インスタンスが必要ですか。つまり、これには状態がありますか。2 番目の質問は、単体テストの作成がどれほど難しいかという質問です。必要ですか。
たとえば、Service Locator パターンを見てください。
一般に、シングルトンは静的クラスよりも優れています。
静的クラスに反するシングルトン:
- 継承でき、継承できます。
- インターフェイスを実装できます。
- シリアル化できます。
- 他のクラスに渡すことができます。
- 処分することができます。
静的クラスを選択してからコンクリートを選択すると、柔軟性がなくなります。ただし、シングルトンを使用する場合は、そのインスタンス化をスレッドセーフにすることを忘れないでください。
一部の関数のコンテナとしてクラスのみを使用している場合は、静的クラスを使用します。ただし、他のほとんどの場合、そのオブジェクトを再利用またはインスタンス化する必要があるため、シングルトンデザインパターンを使用することをお勧めします。非シングルトンとして。
静的クラスは、テストが特に難しいものです。また、コンストラクターを有用なものに使用することはできません。
静的クラスは、MVCヘルパーなどのヘルパーメソッドで推奨されます。
ここで、静的クラスのtomeの制限を確認できます。それらは静的なメンバーのみを持つことができ、密封されています。
この議論からの私の最終見解: 1. オブジェクトには何らかの状態があります。状態とは、オブジェクトの属性の現在の値を意味します。したがって、変更可能な状態が必要で、インスタンスが 1 つだけ必要なシナリオが必要な場合は、Singleton クラスを使用します。たとえば、何らかの操作が成功した後、または何らかの例外が発生した後に更新したいログ ファイルがあるとします。このログ ファイルを更新するには、不整合なデータを避けるためにロックする必要があります。これは、Singleton クラスを介して実現できます。2.オブジェクトの状態を必要とせず、アプリケーションの起動時にクラスをメモリにロードし、アプリケーションの寿命までそこにとどめたい場合は、静的クラスを使用します。
静的クラスを使用して、状態を必要としない単純なメソッドを提供し、オブジェクトをインスタンス化する必要がない場合に使用できます。
シングルトンを使用するということは、オブジェクトを1回だけインスタンス化する必要があり、オブジェクトを渡してその状態を変更できることを意味します。シングルトンを使用すると、継承したり、インターフェイスを実装したりすることもできます。