2017-12-31 54 views
0

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를 갖습니다.

+2

상태 정보를 포함합니까? 그렇지 않다면, 나는 단지'정적'(또는 정적 유틸리티 클래스) 메소드를 만드는 것을 고려할 것이다. 그렇다면 상태 정보는 여러 액세스 포인트 (예 : 여러 스레드/클래스)에서 공유 할 수 있습니까? 그렇지 않으면 싱글 톤을 사용하지 않아야합니다. 귀하의 제한된 설명을 기반으로, 나는 유틸리티 클래스를 향해 현실적으로, 클래스에 필요한 모든 정보를 매개 변수를 통해 메소드에 전달할 수 있습니다 -하지만 그게 날 – MadProgrammer

+0

당신은 [ 이 블로그] (https://dzone.com/articles/java-singletons-using-enum)보다 나은 싱글 톤 구현을 위해. 속성이 '고정적'인 것은 의미가 없다는 제안도 있습니다. – MadProgrammer

+0

싱글 톤을 원하지 않습니다. 그들은 실제로 아주 드뭅니다. 하나를 만들 때 기억할 수있는 유일한 시간은 스레드를 통해 연결을 공유하는 DB 연결 풀을위한 것입니다. – Christian

답변

1

여기에서는 공용 getInstance 메소드를 구현하는 것이 좋습니다. 이 클래스에서 "saveXXFile", "readXXFile"이라는 몇 가지 메서드를 구현하는 더 좋은 방법입니까? 그런 식으로 코드에서 발생할 수있는 다중 스레딩 오류를 피할 수 있습니다.

다른 말로하면이 글을 쓰면 파일 인스턴스를 클래스 사용자에게 노출시키는 대신이 클래스에 "saveXXFile", "readXXFile"이라는 메서드를 캡슐화 할 수 있습니다.