정의 : 클래스에 인스턴스가 하나만 있는지 확인하고 자체적으로 인스턴스를 인스턴스화 하고이 인스턴스를 전체 시스템에 제공합니다.
유형 : 클래스 패턴 클래스 다이어그램 작성 :
클래스 다이어그램 지식 포인트 :
1. 클래스 다이어그램은 이름, 속성 및 메소드의 세 부분으로 나뉩니다.
2. <<로 시작하고 >>로 끝나는 댓글 정보
3. Modifier +는 공개를 나타내고, - 개인을 나타내고, #는 보호를 나타내고, 아무것도 가시적 인 패키지를 나타내는 것은 없습니다.
4. 밑줄이 그어진 속성 또는 메소드는 정적을 나타냅니다.
5. 클래스 다이어그램의 객체 간의 관계에 익숙하지 않은 친구는 기사를 참조 할 수 있습니다. 디자인 패턴의 클래스 간의 관계.
싱글 톤 모드는 23 개의 디자인 모드 중에서 가장 간단한 모드 여야합니다. 다음 요소가 있습니다.
간단한 예를 살펴 보겠습니다.
package com.wolf.action; import java.util.hashmap; import java.util.map; public class demo {public static void main (string args [])은 인스턴스티션 exception, 불법 행사, classnotfoundException {system.out.println (son.getInstance (). System.out.println ( "누가 나"); }} 클래스 아들은 아버지를 확장합니다 {private String name = "son"; 최종 문자열 클래스 = "데모"; 보호 된 문자열 getName () {return this.query ( "aaa"); } public static son getInstance ()는 InstantiationException, INLEGALACCESSException, ClassNotFoundException {// 전역 경로 여야합니다. 그렇지 않으면 (SON) 인스턴스 ( "com.wolf.action.son"); }} 클래스 아버지 {private static map <string, object> instance = new Hashmap <String, Object> (); 개인 문자열 이름 = "프리미엄 클래스"; Protected Void fatcher () {System.out.println ( "나는 부모 클래스"); } 보호 된 문자열 쿼리 (String SQL) {return sql + "완료되었습니다"; } public static 객체 인스턴스 (String objname)는 InstantiationException, INSTARY.NOTFOUNDEXCEPTION {if (instast.get (objname) == null ||! (instance.get (objname) instance)) {instance.put (objname, class.forname (objname) (); } return instance.get (objname); }} 싱글 톤 패턴은 물체를 인스턴스화하는 타이밍에 따라 두 가지 유형으로 나뉩니다. 하나는 배고픈 싱글 톤이고 다른 하나는 게으른 싱글 톤입니다. 싱글 톤 클래스가로드되면 싱글 톤은 자체 참조로 개체를 인스턴스화합니다. 게으른 스타일은 인스턴스 메소드가 호출 될 때만 객체를 인스턴스화합니다. 코드는 다음과 같습니다.
배고픈 남자 스타일의 단일 케이스
공개 클래스 싱글 톤 {개인 정적 싱글 톤 싱글 톤 = 새로운 싱글 톤 (); Private Singleton () {} public static singleton getinstance () {return singleton; }}게으른 단일 케이스
공개 클래스 싱글 톤 {개인 정적 싱글 톤 싱글 톤; private singleton () {} public static synchronized singleton getinstance () {if (Singleton == null) {Singleton = new Singleton (); } 반환 싱글 톤; }}싱글 톤 모드의 장점 :
적용 가능한 시나리오 : 싱글 톤 모드의 위의 장점으로 인해 프로그래밍에보다 일반적으로 사용되는 설계 모드입니다. 싱글 톤 모드를 사용하기위한 적절한 시나리오에 대해 알고있는 것을 요약했습니다.
싱글 톤 모드에 대한 메모 :
Java의 싱글 톤 패턴에 대한 논쟁 :
싱글 톤 모드의 객체가 오랫동안 사용되지 않으면 JVM 쓰레기 수집기에 의해 수집됩니까? 나는 많은 정보를 보았습니다. 싱글 톤 객체가 오랫동안 메모리에 사용되지 않으면 JVM의 쓰레기로 간주되며 쓰레기 수집을 수행 할 때 청소됩니다. 나는이 진술에 대해 회의적이다. 내 견해는 : 핫스팟 가상 머신 버전 1.6에서 JVM 쓰레기 수집기는 싱글 톤의 싱글 톤 객체와 정적으로 참조 된 연결이 인공적으로 연결이 끊어지지 않는 한 싱글 톤 객체를 재활용하지 않습니다.
이 논쟁과 관련하여 저자는이 논의를 논의하기 위해 별도의 기사를 썼습니다. 의견이 다르 거나이 경험을 경험 한 경우 싱글 톤 모델 토론 기사를 입력하십시오. 싱글 톤 모델과 가비지 컬렉션이 토론에 참여합니다.
JVM에 여러 개의 싱글 톤이 나타납니다
분산 시스템의 경우 다중 클래스 로더 및 직렬화 된 경우 다중 싱글 톤이 생성되며, 이는 의심 할 여지없이 사실입니다. 그렇다면 동일한 JVM에서 싱글 톤이 생성됩니까? 반사 방법을 사용하지 않는 한, 새로운 싱글 톤을 얻지 않는 한 싱글 톤에서 제공하는 getInstance () 방법을 사용하여 동일한 싱글 톤 만 얻을 수 있습니다. 코드는 다음과 같습니다
class c = class.forname (Singleton.class.getName ()); 생성자 CT = C. getDeclaredConstructor (); ct.setAccessible (true); 싱글 톤 싱글 톤 = (싱글 톤) ct.newinstance ();
이런 식으로, 각 실행은 새로운 싱글 톤 객체를 생성합니다. 따라서 싱글 톤 모드를 사용할 때는 반사를 사용하여 새로운 싱글 톤 객체를 생성하지 않도록주의하십시오.
게으른 싱글 톤 스레드가 안전합니까?
주로 게으른 싱글 톤 패턴이 스레드 insecure라는 것은 주로 온라인 진술입니다. 인스턴스화 방법에 동기화 된 키워드를 추가하더라도 여전히 위험합니다. 그러나 테스트를 인코딩 한 후에는 동기화 된 키워드를 추가하여 수정하여 성능에 부분적으로 영향을 미치지만 스레드 안전이며 여러 객체를 인스턴스화하지 않는다는 것을 알았습니다.
배고프고 게으른 스타일의 두 가지 유형의 싱글 톤 모드 만 있습니까?
배고픈 싱글 톤과 게으른 싱글 톤은 비교적 주류이며 일반적으로 사용되는 싱글 톤 패턴 방법입니다. 이론적으로, 클래스의 하나의 인스턴스 만 구현할 수있는 모든 설계 패턴을 싱글 톤 패턴이라고 할 수 있습니다.
싱글 톤 수업을 상속받을 수 있습니까?
시공 방법은 비공개이므로 상속 할 수는 없지만 등록 된 싱글 톤과 같은 다른 많은 싱글 톤 패턴을 상속받을 수 있습니다.
배고픈 싱글 톤 또는 게으른 싱글 톤이되는 것이 낫습니까?
Java에서는 배고픈 싱글 톤이 게으른 싱글 톤보다 낫습니다. C ++에서는 게으른 싱글 톤이 일반적으로 사용됩니다.
싱글 톤 패턴은 비교적 간단하므로 여기서 예제 코드 데모를 제공하지 않습니다.