FileManager
이라는 클래스가 있다고 상상해보십시오. 이 클래스는 이러한 파일에서 데이터를로드하고 저장하는 과정에서 파일을 만들고 이러한 파일에서 데이터를 검색하는 작업을 처리합니다. 이 클래스는 하나의 인스턴스 만 가질 필요가 있습니다. Singleton을 사용하여 하나의 인스턴스로 유지해야합니까 (필요한 모든 것이기 때문에) 또는 매번 새 인스턴스를 만들어야합니까?싱글턴이이 경우에 적합할까요?
사실에 대한 확실한 이유로 답을 뒷받침 해 주시기 바랍니다.
편집 : 다음은 싱글 톤을 사용한 예입니다. 추가적인 질문으로, 열정적 인 또는 게으른 인스턴스화를 사용해야합니까? 어떤 경우에도 이점이 무엇이며이 경우에 더 수용 가능한 것은 과입니까?
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;
}
코드는 파일을 만드는 방법이이 파일에서 이러한 파일에 데이터를로드 데이터를 저장하기 위해 계속된다. 이러한 메서드는 한 클래스에서만 호출됩니다. 코드는 다양한 클래스에 걸쳐 사용되는 getter를 갖습니다.
상태 정보를 포함합니까? 그렇지 않다면, 나는 단지'정적'(또는 정적 유틸리티 클래스) 메소드를 만드는 것을 고려할 것이다. 그렇다면 상태 정보는 여러 액세스 포인트 (예 : 여러 스레드/클래스)에서 공유 할 수 있습니까? 그렇지 않으면 싱글 톤을 사용하지 않아야합니다. 귀하의 제한된 설명을 기반으로, 나는 유틸리티 클래스를 향해 현실적으로, 클래스에 필요한 모든 정보를 매개 변수를 통해 메소드에 전달할 수 있습니다 -하지만 그게 날 – MadProgrammer
당신은 [ 이 블로그] (https://dzone.com/articles/java-singletons-using-enum)보다 나은 싱글 톤 구현을 위해. 속성이 '고정적'인 것은 의미가 없다는 제안도 있습니다. – MadProgrammer
싱글 톤을 원하지 않습니다. 그들은 실제로 아주 드뭅니다. 하나를 만들 때 기억할 수있는 유일한 시간은 스레드를 통해 연결을 공유하는 DB 연결 풀을위한 것입니다. – Christian