2017-12-31 36 views
0

私はFileManagerというクラスがあるとします。このクラスは、ファイルの作成と、これらのファイルからのデータの取得、およびこれらのファイルからのデータのロードと保存を処理します。このクラスは1つのインスタンスしか持つ必要がありません。 Singletonを使用して1つのインスタンスとして保持する必要があります(これがすべて必要です)。または、毎回新しいインスタンスを作成する必要がありますか?この場合、シングルトンは適切でしょうか?

私はあなたの答えを事実と一緒に支持するようお願いします。

編集:これはシングルトンを使用した例です。追加の質問として、これは熱心なまたは怠惰なインスタンス化を使用する必要がありますか?どちらにも利点があり、この場合にはより受け入れやすいのは、です。

public class FileManager { 

private static FileManager instance; 
private static File kitFile = null; 
private static File langFile = null; 

private static FileConfiguration langData = null; 
private static FileConfiguration kitData = null; 

public static FileManager getInstance() { 
    if(instance == null) 
     instance = new FileManager(); 
    if(kitFile == null) 
     kitFile = new File(Kits.getInstance().getDataFolder(), "Kits.yml"); 
    if(kitData == null) 
     kitData = YamlConfiguration.loadConfiguration(kitFile); 
    if(langFile == null) 
     langFile = new File(Kits.getInstance().getDataFolder(), "/lang/"+Kits.getInstance().getConfig().getString("lang")); 
    if(langData == null) 
     langData = YamlConfiguration.loadConfiguration(langFile); 
    return instance; 
} 

コードには、ファイルを作成し、これらのファイルにデータを保存し、これらのファイルからデータをロードする方法があります。これらのメソッドは1つのクラスでのみ呼び出されます。コードは、さまざまなクラスで使用されるgetterを持つようになります。

+2

ステートフルな情報を保持していますか?もしそうでなければ、私は 'static'(または静的ユーティリティクラス)メソッドを作ることだけを考えます。存在する場合、その状態情報は複数のアクセスポイント(つまり複数のスレッド/クラス)で共有可能ですか?そうでない場合は、シングルトンを使用しないでください。あなたの限られた説明に基づいて、私はクラスに必要なすべての情報をメソッドへのパラメータ経由で渡すことができる、実用的なユーティリティクラスに傾いていますが、それは私です – MadProgrammer

+0

また、このブログ](https://dzone.com/articles/java-singletons-using-enum)を参照してください。また、プロパティが静的であることに意味がないことをお勧めします。 – MadProgrammer

+0

シングルトンは必要ありません。彼らは実際にはまれです。私が覚えている唯一の覚えがあるのは、スレッド間で接続を共有するDB接続プールのためです。 – Christian

答えて

1

パブリックgetInstanceメソッドをここに実装することをお勧めします。これは、このクラスの "saveXXFile"、 "readXXFile"と呼ばれるメソッドを実装するより良い方法ですか?このようにして、コードで発生する可能性のあるマルチスレッドエラーを回避することもできます。

別の言い方をすれば、私はこれを書くと、ファイルインスタンスをクラスユーザーに公開するのではなく、このクラスに "saveXXFile"、 "readXXFile"と呼ばれるメソッドをカプセル化します。

関連する問題