2010-08-13 4 views
0

하나의 부서 클래스가 있습니다. 값이 HR 인 인스턴스 부서와 값이 Admin 인 부서 인스턴스를 만들고 싶습니다. 응용 프로그램이로드 될 때 (콘솔 응용 프로그램) 내 모든 프로그램에서 이러한 인스턴스를 사용할 수 있습니다. 어떻게 다른 클래스의 모든 곳에서 동일한 인스턴스를 사용할 수 있습니까? 예를 들어 CSV 파일에서 직원을 읽고 직원 개체를 만듭니다. 이제 직원 개체를 만들려면 부서 개체를 사용해야합니다 .I 파일에서 읽은 부서의 가치에 따라 부서의 적절한 가치를 설정해야합니다. 수행 방법내 응용 프로그램에서 하나의 객체 인스턴스를 사용하는 방법

답변

2

생성자를 개인으로 선언하고 정적 참조를 유지함으로써 구현할 수있는 싱글 톤 패턴의 인스턴스를 찾고 있습니다. getter에서 초기화 된 변수. 당신은 단순히 두 번째 정적 변수에 매핑되는 관리 부서에 대한 마찬가지로 Department.getHRDepartment()를 호출 할 수 있습니다 코드의 나머지

private static Department hr = null; 

private Department() { 
} 

public static synchronized Department getHRInstance() { 
    if (null == hr) { 
     hr = new Department(); 
    } 
    return hr; 
} 

:처럼 뭔가. (2 개 이상의 싱글 톤의 경우 인스턴스를 저장하기 위해지도를 사용하거나 싱글 톤을 정의하기 위해 Enum 클래스를 사용하는 것이 좋습니다.) 싱글 톤 인스턴스는 종속성 주입을 수행하기 어렵다는 단점을 가지고 있습니다. JUnit 테스트가 어렵거나 불가능합니다. 대부분의 싱글 톤 패턴을 사용하는 경우 실제로는 "싱글 톤"인스턴스를 초기화하는 동안 애플리케이션을 초기화하고 생성자를 통해 클래스를 전달하거나 객체를 생성 한 후 싱글 톤 참조를 전달하는 객체 팩터 리를 생성하는 것이 더 좋습니다 인스턴스.

+0

+1 결점을 매우 명확하게하기 위해. 우수 답변. (정적) 싱글 톤 ** s \ * \ * k ** 너무. – whiskeysierra

1

귀하의 질문에 대한 직접적인 답변이 아니지만 귀하가 원하는 것은 어쩌면 enum이라고 생각됩니다. department이 복잡한 상태 또는 동작이없는 단순한 값인 경우 열거 형을 사용하는 것이 좋습니다.

관련 문제