コミュニティは、いつシングルトンを使用することが適切であると考えていますか? [複製]
-
02-07-2019 - |
質問
可能な重複:
シングルトン:使用方法
シングルトンパターンに関するEwan Makepeaceの優れた以前の質問に続いて、「いつシングルトンを使用することが適切であるとコミュニティが信じるのか」と質問したいと思いました
批評の例を挙げましょう:
" IconManager"がありますシングルトン。まず、ディスク上のアイコンの場所を示すプロパティファイルを読み取り、すべてのアイコンを読み取り、将来使用するためにそれらをキャッシュします。
アイコンはすべてのUI(タブ、テーブル、フレームなど)で使用できます。したがって、静的なシングルトンメソッドを介してアイコンにアクセスするのは非常に便利です。また、アイコンが1回だけ読み取られることを確認したい(必要なたびにディスクからの読み取りが非常に遅い場合)コミュニティは、これがシングルトンの適切な使用であると考えていますか?そうでない場合、他にどのように実装されているでしょうか?
シングルトンの他の有効な使用法はありますか?
解決
IconManagerはファクトリパターンを実装し、アイコンを構築します。そしておそらく、アイコンを作成するために必要なファクトリは1つだけです。したがって、この場合、シングルトンIMHOを使用しても問題はありません。これらの一元化された工場のいくつかでソフトウェアを構築しましたが、すべてうまくいきました。
このスレッドも参照してください:シングルトンクラスの誤用の最も一般的な例
他のヒント
別のアプローチは、アイコンをロードするクラスのインスタンスを作成し、このインスタンスへの参照を、リソースにアクセスする必要のあるすべてのコントロールに渡すことです。将来的には、複数のアイコンローダーを使用して、必要に応じてそれらを渡すことができます。将来により柔軟に対応しますが、参照を無数のコントロールに渡すというかなり大きな欠点があります。
シングルトンの有効な使用方法は、アクティブな接続が1つしかないリソースにアクセスする場合です。この制限があるハードウェアデバイスは多数あります。
1つの接続のみを許可する CCTVカメラに接続しているとしましょう。シングルトンパターンは、最初の使用時にこの接続を作成し、開いたままにします。カメラから、おそらく複数のソースからの写真が必要になったときはいつでも、他の問題が考慮されると、写真が利用できることを知ってシングルトンをヒットできます。
カメラの初期接続時間が遅い場合は、接続を開くのではなく、この方法で接続を開いたままにして、写真をつかんで再び接続を閉じると、はるかに効率的になります。
実際にシングルトンを使用したことはありませんが、デザインパターンはあまり使用していません。 FactoryやGatewayパターンのような他のパターンがそれらを必要とする場合、それらは非常に価値があると思います。ただし、それらがすべて単独で良いということはほとんどありません。
モノステートパターンを検討するとよいでしょう。多くの欠点のないシングルトンのすべての利点。これにより、探しているグローバルプロパティをたまたま持っている状態を持つリッチオブジェクトを持つことができます。