리플렉션으로 인해 Singleton 오류를 방지하려면 생성자가 이미 초기화되어 있고 일부 클래스가 다시 초기화된 경우 생성자에서 런타임 예외를 throw해야 합니다. SingletonClass.java를 업데이트해 보겠습니다. 경우에 따라 분산 시스템에서 는 파일 시스템에 해당 상태를 저장하고 나중에 검색할 수 있도록 Singleton 클래스에서 Serializable 인터페이스를 구현해야 합니다. 다음은 직렬화 가능한 인터페이스를 구현하는 작은 단일 클래스입니다. 두 인스턴스모두 동일한 해시 코드를 갖는 것을 볼 수 있습니다. 따라서 위의 코드가 완벽한 싱글 톤을 만들 수 있음을 의미합니다. 오른쪽???? 아니요. 런타임에서 생성자 가시성을 공용으로 변경하여 Singleton 클래스의 새 인스턴스를 만들고 해당 생성자 사용 으로 새 인스턴스를 만들 수 있습니다. 아래 코드를 실행하고 우리의 싱글 톤 클래스가 살아남을 참조? 개인 정적 최종 열망초기화싱글톤 인스턴스 = 새 열망초기화싱글톤(); 리플렉션을 통해 이러한 상황을 극복하기 위해 Joshua Bloch는 자바가 열거형 값을 Java 프로그램에서 한 번만 인스턴스화할 수 있도록 싱글톤 디자인 패턴을 구현하기 위해 에넘을 사용할 것을 제안합니다. Java 열거형 값은 전 세계적으로 액세스할 수 있으므로 싱글톤도 마찬가지입니다. 단점은 열거형 유형이 다소 유연하지 않다는 것입니다. 예를 들어 지연 초기화를 허용하지 않습니다. Singleton 패턴을 구현하기 위해 서로 다른 접근 방식을 가지고 있지만 모두 다음과 같은 일반적인 개념을 가지고 있습니다.
또는 경우 (! Thread.currentThread().getStackTrace()[2].getClassName(“BillPughSingleton”))){{새 런타임예외(“싱글톤 이미 초기화”)를 throw합니다. 정적 메서드가 있는 정적 클래스는 단일 메서드와 동일한 기능을 생성합니다. 싱글톤은 객체 지향 접근 방식을 사용하여 정의되기 때문에 일반적으로 싱글톤으로 작업하는 것이 좋습니다. Singleton은 하나의 인스턴스와 클래스의 기능을 관리하는 데 사용되기 때문에 “하나의 클래스, 하나의 책임” 원칙을 위반합니다. 생성자가 private으로 선언되면 단일 톤을 하위 분류할 수 없습니다. 여러 클래스 로더를 사용하는 경우 단일 의 여러 인스턴스가 생성 될 수 있습니다. singleton 클래스의 인스턴스를 포함하는 개인 내부 정적 클래스를 확인합니다. singleton 클래스가 로드되면 SingletonHelper 클래스가 메모리에 로드되지 않으며 누군가가 getInstance 메서드를 호출할 때만 이 클래스가 로드되고 Singleton 클래스 인스턴스가 만들어집니다.