싱글 톤 모델은 23 개의 디자인 모델 중에서 가장 간단한 디자인 모델이며 엔터프라이즈 개발에 널리 사용됩니다. 싱글 톤 패턴의 장점은 프로젝트에 인스턴스가 하나만 있다는 것입니다.
특징 : 생성자가 민영화되고 객체는 민영화되며 외부 액세스 인터페이스 만 제공합니다.
응용 프로그램 시나리오 :
1. 시스템은 로그 시스템, 스프링 리소스 관리자 등과 같은 리소스를 공유해야합니다.
2. 자원 사용을 제어하기 위해 : 스레드 풀과 같은
엔터프라이즈 수준 개발 및 일반적인 프레임 워크의 일반적인 응용 프로그램 :
J2EE의 서블릿, 봄의 자원 관리자 (예 : Bean), 데이터베이스 연결 풀, 스레드 풀, 로그 시스템, 웹 사이트 카운터 등
싱글 톤 패턴 분류 :
1. 배고픈 모드 : 배고픈 모드는 코드에서 가장 간단한 싱글 톤 모드이지만 클래스가 초기화 될 때 인스턴스가로드됩니다. 즉시 사용되지 않으면 시스템이로드됩니다. 특정 코드는 다음과 같습니다.
공개 클래스 싱글 톤 {private static singleton instance = new Singleton (); Private Singleton () {} public static singleton getinstance () {return instance; }}2. 게으른 모드 : 배고픈 모드와 비교할 때 게으른 모드는 인스턴스화되어 프로세스를위한 유일한 외부 인터페이스에 배치되어 지연된 로딩, 시스템 초기화 시간을 저장하지만 스레드가 안전하지 않은 상황이 있습니다.
공개 클래스 싱글 톤 {private static singleton instance = null; private singleton () {} public static singleton getinstance () {if (instance == null) {return new Singleton (); } return 인스턴스; }}3. 이중 점검 잠금 : 이중 체크 잠금 모드는 실제로 게으른 모드의 업그레이드이므로 게으른 모드 스레드 안전을 만듭니다. 참고 : 더블 체크 잠금 잠금 장치에는 메모리 문제가있어 더블 체크 잠금 장치가 무효화 될 수 있습니다.
공개 클래스 싱글 톤 {private static singleton instance = null; private singleton () {} public static singleton getinstance () {if (instance == null) {synchronized (singleton.class) {if (instance == null) {return new Singleton (); }} return instance; }}4. 정적 내부 클래스 모드 : 정적 내부 클래스는 게으른 모드와 사악한 모드를 모두 가지고 있습니다 : 스레드-안전, 지연된 하중.
공개 클래스 싱글 톤 {개인 정적 클래스 싱글 톤 팩토리 {private static singleton instance = new Singleton (); } private singleton () {} public static singleton getinstance () {return singletonfactory.instance; }}5. 열거 클래스 모드 : 스레드-안전뿐만 아니라 desequence 및 반사 문제를 방지하는 가장 완벽한 단일 이익 모드 여야합니다.
Enum Singleton {인스턴스; public void dosomething () {...}}싱글 톤 패턴 세부 사항 문제 :
1. 반사 싱글 톤 모드를 깨뜨립니다. 반사는 싱글 톤 모드의 구현을 파괴 할 수 있습니다 (열거 모드 제외)
/***반사에 의한 싱글 톤 모드 파괴*/public class demo01 {public static void main (String [] args)은 예외를 던졌습니다 {Singleton S1 = Singleton.getInstance (); Singleton S2 = Singleton.getInstance (); System.out.println (S1 == S2); 클래스 <singleton> clazz = (class <singleton>) class.forname ( "com.singleton.singleton"); 생성자 <Sallleton> 생성자 = Clazz.getDeclaredConstructor (NULL); 생성기 .setAccessible (true); 싱글 톤 S3 = 생성자 .newinstance (); System.out.println (S1 == S3); }} 클래스 싱글 톤 {private static singleton instance = new Singleton (); private singleton () {// 반사가 단일 이익 모드를 파괴하는 것을 방지하기위한 방법 // if (instance! = null) {// 새로운 runtimeexception (); //}} 공개 정적 Singleton getInstance () {return instance; }}실제로, 소위 예방은 반사를 통해 만들 수없는 것을 의미합니다.
2. Desserialization은 싱글 톤 패턴을 깨뜨립니다 (열거 클래스 패턴 제외)
/*** Desserialization은 싱글 톤 패턴을 깨뜨립니다*/public class demo02 {public static void main (String [] args)은 예외 {singleton s1 = singleton.getInstance (); Singleton S2 = Singleton.getInstance (); System.out.println (S1 == S2); fileoutputStream fos = 새 FileOutputStream ( "d : //test.txt"); ObjectOutputStream OOS = 새로운 ObjectOutputStream (FOS); oos.writeobject (S1); oos.close (); fos.close (); ObjectInputStream OIS = new ObjectInputStream (new FileInputStream ( "d : //test.txt")); Singleton S3 = (Singleton) OIS.ReadObject (); System.out.println (S1 == S3); }} 클래스 싱글 톤은 직렬화 가능한 {private static singleton instance = new Singleton ()을 구현합니다. 공개 정적 싱글 톤 GetInstance () {return instance; } // Default Desorialization, 객체가 이미 존재하면이 메소드는 // private 객체 readResolve ()가 ObjectStreamException {// return instance; // //}}이라고합니다.이 두 상황은 이해로 제한되며 실제 개발 과정에서 많이 사용되지 않습니다.
이 시점에서 싱글 톤 패턴이 완료되었습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.