정의 : 싱글 톤 패턴의 주요 기능은 Java 응용 프로그램에서 클래스의 한 인스턴스 만 존재하도록하는 것입니다.
디렉토리 데이터베이스 연결 설정과 같은 많은 작업에서 이러한 단일 스레드 작업이 필요합니다.
또한 싱글 톤은 이런 식으로 상태로 표시 될 수 있습니다. 싱글 톤 클래스는이 숫자를 안전하게 동기화 하여이 카운트를 유지하고 자동으로 증가 할 수 있습니다.
또한 싱글 톤은 무국적 일 수도 있습니다. 도구와 같은 기능을 제공하고
싱글 톤 모델은 우리에게 이러한 방식으로 구현할 가능성을 제공합니다. 싱글 톤을 사용하는 장점은 인스턴스 수를 제한하고 Java 쓰레기 수집에 도움이되기 때문에 메모리를 저장할 수 있다는 것입니다.
로드 된 클래스는 실제로 자원에 속하기 때문에 클래스 로더가 싱글 톤 모드에서도 공장 모드에서 구현되는 경우가 많습니다.
싱글 톤 모드를 사용하는 방법
일반 싱글 톤 패턴에는 일반적으로 여러 형태가 있습니다.
코드 사본은 다음과 같습니다.
공개 클래스 싱글 톤 {
개인 싱글 톤 () {}
// 자신의 인스턴스를 자신의 인스턴스를 정의하는 것이 이상하지 않습니까?
// 이것은 내부 통화에만 개인입니다
개인 정적 싱글 톤 인스턴스 = 새로운 싱글 톤 ();
// 여기 에이 클래스에 대한 외부 액세스를위한 정적 메소드가 있으며 직접 액세스 할 수 있습니다.
공개 정적 싱글 톤 getinstance () {
반환 인스턴스;
}
}
두 번째 형태 :
코드 사본은 다음과 같습니다.
공개 클래스 싱글 톤 {
개인 정적 싱글 톤 인스턴스 = null;
공개 정적 동기화 된 싱글 톤 getInstance () {
//이 메소드는 위에서 개선 될 필요가 없습니다.
// 사용 중에 인스턴스를 만들어 효율성을 향상시킵니다!
if (instance == null)
인스턴스 = 새로운 싱글 톤 ();
반환 인스턴스;
}
}
Singleton.getInstance ()를 사용하여 Singleton 클래스에 액세스 할 수 있습니다.
위의 두 번째 형태는 게으른 초기화입니다. 즉, 초기 싱글 톤을 처음으로 요구하고 향후 생성 할 필요가 없습니다.
게으른 초기화 양식에 동기화되는 것이 중요합니다. DCL (Double-Checked Locking)에 대한 게으른 초기화에 대한 많은 논의가 있으며, 관심있는 사람들은 더 연구 할 것입니다.
일반적으로 첫 번째 형태는 더 안전하다고 생각됩니다.
싱글 톤 모드를 사용할 때 주목해야 할 사항
때로는 싱글 톤을 사용하는 것이 싱글 톤의 목적을 달성 할 수 없습니다. -서버 및 크로스 -JVM.
Sun 's Pet Store Source Code (Pet Store 1.3.1)의 Servicelocator를 예로 들어 간단히 분석하겠습니다.
PET 스토어에는 두 가지 유형의 ServicElocator가 있으며, 하나는 EJB 디렉토리에 있고 다른 하나는이 두 개의 ServicElocators를 확인할 때 컨텐츠가 유사하며 EJB Query 및 EJB Query와 제공됩니다. 포지셔닝 서비스이지만 왜 분리합니까? 이 두 Servicelocators에 대한주의 깊은 연구 후에는 차이점을 발견했습니다. Servicelocator는 웹에서 싱글 톤 모드를 채택하고 Servicelocator는 리소스 포지셔닝에 속하므로 물론 싱글 톤 모드를 사용해야합니다. 그러나 EJB에서 싱글 톤 모델은 기능을 잃어 버렸으므로 ServiceLocator는 두 가지 유형으로 나뉘며, 하나는 웹 서비스를위한 것이고 다른 하나는 EJB 서비스를위한 것입니다.
싱글 톤 패턴은 단순 해 보이고 사용하기가 매우 편리하지만 Java 클래스 스레드 메모리 및 기타 개념을 상당히 이해해야합니다.