アプリケーションがあり、configファイルにアクセスするにはシングルトンクラスがあり、このオブジェクトが使用されています。
私はシングルトンクラスが良いと理解し、オブジェクトのインスタンスを1つだけ提供します。 私の質問は、必要なときにconfigファイルを開いたり閉じたりすることができない理由です。
もちろん、Windowsがハンドルを割り当てて、使用していないときにはそれを処分する必要があるため、この方法は高価になる可能性があります。
シングルトンクラスを使用する特別な理由はありますか?
ありがとうございました、 ハーシャ
回答:
回答№1は1シングルトンクラスは純粋な悪である可能性があります。それは通常です。コードにルーズカップリングを適用することを決定した場合は、これが表示されます。
私のアドバイスはあなたのデザインを再考することです。 アプリケーションの起動時にconfigファイルを読み込み、メモリ内の設定パラメータを使ってオブジェクトを永続させることを考えてください。次に、設定パラメータを必要とするクラス/インタフェースにオブジェクトを渡すことができます。
また、シングルトン(アンチ)パターンを使用せずに設定ファイルに多数の書き込みを必要としないようにアプリケーションを再設計することもできます。
回答№2の場合は0
私は何とかあなたの質問に後ろ向きに答えます:)
シングルトンクラスを使用する理由。最初に注意すべきことは、シングルトンクラスがおそらくソフトウェア開発における最もミスダウンされていないデザインパターンです。しかし、それは利点があり、あなたのケースでは、それは使用可能だと思います。あなたのアプリケーションが設定ファイルを広範囲に使用するならば、それを通常はシングルトンにするのが良い考えです。設定ファイルオブジェクトをどこにでも渡すのは苦痛です。これは、「疎結合」やTDDを主張する人にもお答えします。あなたのアプリケーションが設定ファイルと論理的に結合されている場合は、それを使用してconfigファイルでテストすればよいからです。その上に、あなたのシングルトンはテストのために異なる(モック)インスタンスを返すことができ、素晴らしいカプセル化を提供します。
必要なときにconfigファイルを開いたり閉じたりすることができないのはなぜですか? まあ、シングルトンですることができます。 シングルトンパターンはオブジェクト指向設計(オブジェクトの1インスタンス)に制限を課す。これは、プログラマーがコード内のどこでも呼び出しできることを意味します:ConfigSingleton.Instance.GetDefaultFontColor();このオブジェクトの内部の動作は完全にカプセル化されています。あなたが好きなら、プログラマがGetDefaultFontColorを呼び出すたびにファイルを開くことができます。あるいは、ある種のイベント(ファイルの変更)で設定ファイルを読み直し、それをあなたのメモリに保存することもできます。
最後の段落を言い換えると、「あなたがシングルトンパターンを使用しているという事実は、あなたがどのようにしていつ、いつあなたの設定ファイルを開いたり、読んだり、閉じたり、書き込んだりするかについて何も言いません。