2014-03-05 2 views
0

자바에서이 싱글 톤 클래스를 사용하고 있는데, 한 가지 방법으로 Main에서 인스턴스화 된 클래스 객체가 필요합니다. 이 코드는 싱글 톤 클래스의 생성자로 작성 되었기 때문에이 메서드를이 메서드에 전달하는 방법을 알지 못합니다. 프로그램이 시작되자 마자 바로 실행해야하기 때문입니다.다른 클래스의 객체를 싱글 톤 클래스에 전달하기

생성자에서 코드를 꺼내서 Main (내가 선호하지는 않지만)에서 호출하는 독립 실행 형 메서드로 만들지 또 다른 방법이 있습니까?

아이디어가 있으십니까?

코드 :

홈페이지 :

public static void main(String[] args) { 
    X x; // This is the object I need to pass to the singleton class 
} 

싱글 클래스 : 나는 전체 코드를 추가하지

public SomeSingletonClass { 

    private Queue<Y> someQueue; // Y is another class I have in my project 
    private SomeSingletonClass(){ 
     someQueue.add(new Y(<some data>, <some data>, <here I need an object of X as the constructor needs it>); 
    } 
} 

. 내가 갇혀있는 부분.

+3

코드를 공유 할 수 있습니까? –

+0

실제로 설명에서 코드를 그림화하는 것은 매우 어렵습니다. 반면에 우리가 따를 수있는 샘플이 있다면 우리는 훨씬 더 당신을 도울 수 있습니다. (제쳐두고, 나는 일반적으로 어쨌든 싱글 톤을 피하려고 노력하지만 ...) –

+0

몇 가지 코드를 추가하려고합니다. (제쳐두고, 싱글 톤의 문제점은 무엇입니까?) – pratnala

답변

1

두 가지 주요 옵션이 있습니다.

첫 번째는 비웃음의 울부 짖음을 생산할 것입니다. 그리고 바로 그것이 지옥의 어두운 터널이기 때문에 그렇습니다.

public class X { 

} 

public class Y { 

    public Y(String s, X x) { 

    } 
} 

public class Main { 

    public static X x = new X(); 
} 

public class SomeSingletonClass { 

    private Queue<Y> someQueue = new LinkedList<>();; 

    private SomeSingletonClass() { 
     someQueue.add(new Y("Hello", Main.x)); 
    } 

} 

가 여기에 우리가 Main에 의해 생성 된 Xpublic static 그래서 지금, 기본적으로, 사용자의 싱글과 병행하여 글로벌 상태입니다.

대부분의 독자는 이것이 얼마나 불쾌한 지 이해할 수 있지만 가장 간단한 해결책이므로 자주 찍는 독자입니다.

두 번째 옵션은 지연 생성입니다.

public class BetterSingletonClass { 
    private BetterSingletonClass me = null; 
    private Queue<Y> someQueue = new LinkedList<>(); 

    private BetterSingletonClass(X x) { 
     someQueue.add(new Y("Hello", x)); 
    } 

    public BetterSingletonClass getInstance (X x) { 
     if (me == null) { 
      me = new BetterSingletonClass(x); 
     } 
     return me; 
    } 

} 

이 기능을 실제 싱글 톤으로 만들려고 노력한 것은 아닙니다. n'or는이 스레드로부터 안전합니다. 많은 예제를 위해 thread safe singleton을 다른 곳에서 검색 할 수 있습니다.

+0

두 번째 하나는, 심지어 더 이상 싱글 클래스입니다 hehe? 어쨌든 도움 주셔서 감사합니다. 아마도이 시점에서 공장이나 무언가를 읽거나 생성자와 코드를 분리해야 할 것입니다. 둘 다 나에게 지옥의 터널처럼 보인다. – pratnala

관련 문제