2020-03-04

2991 단어
경 자 쥐 년 무인 월 병 오 일
묘사 하 다.
어제 의 프로젝트 를 완 성 했 으 니, 시간 이 있 으 면 업그레이드 하 세 요.
디자인 모델 의 단일 예 모델
기술 블 로그: null
수필
단일 모드
  • 구조 방법의 민영화
  • 대외 적 으로 인 스 턴 스 를 얻 는 정적 방법
  • 을 제공 합 니 다.
    굶 주 린 사람 식
    방식 1: 정적 속성 사용 가능
    public class Singleton {
    
        private final static Singleton INSTANCE = new Singleton();
    
        private Singleton(){}
    
        public static Singleton getInstance(){
            return INSTANCE;
        }
    }
    

    방식 2: 정적 코드 블록 사용 가능
    public class Singleton {
    
        private static Singleton instance;
    
        static {
            instance = new Singleton();
        }
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            return instance;
        }
    }
    

    게으름뱅이 식
    방식 1: 스 레 드 가 안전 하지 않 습 니 다. 사용 할 수 없습니다.
    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
      
        public static Singleton getInstance() {  
      	 	if (instance == null) {  
       		    instance = new Singleton();  
      		}  
        	return instance;  
        }  
    }
    

    방식 2: (스 레 드 안전, 동기 화 방법) 효율 이 안 되 고 추천 하지 않 습 니 다.
    public class Singleton {
    
        private static Singleton singleton;
    
        private Singleton() {}
    
        public static synchronized Singleton getInstance() {
            if (singleton == null) {
                singleton = new Singleton();
            }
            return singleton;
        }
    }
    

    방식 3: 스 레 드 가 안전 하지 않 습 니 다. 사용 할 수 없습니다.
    public class Singleton {
    
        private static Singleton singleton;
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            if (singleton == null) {
                synchronized (Singleton.class) {
                    singleton = new Singleton();
                }
            }
            return singleton;
        }
    }
    

    이중 검사
    스 레 드 안전, 효율 높 은 추천 사용
    public class Singleton {
    
        private static volatile Singleton singleton;
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            if (singleton == null) {
                synchronized (Singleton.class) {
                    if (singleton == null) {
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    }
    

    정적 내부 클래스
    클래스 를 불 러 올 때 내부 클래스 가 불 러 오지 않 기 때문에 사용 할 때 불 러 옵 니 다.
    자바 가상 머 신 은 클래스 로드 가 스 레 드 안전 한 추천 사용 임 을 보증 합 니 다.
    public class Singleton {
    
        private Singleton() {}
    
        private static class SingletonInstance {
            private static final Singleton INSTANCE = new Singleton();
        }
    
        public static Singleton getInstance() {
            return SingletonInstance.INSTANCE;
        }
    }
    

    매 거
    JDK 1.5 에 추 가 된 매 거 진 을 통 해 단일 모드 를 실현 합 니 다.다 중 스 레 드 동기 화 문 제 를 피 할 수 있 을 뿐만 아니 라 반 직렬 화 를 방지 하여 새로운 대상 을 다시 만 드 는 것 도 방지 할 수 있다.JDK 1.5 에 매 거 되 어 추 가 된 것 같 습 니 다.
    public enum Singleton {
        INSTANCE;
        public void whateverMethod() {
    
        }
    }
    

    좋은 웹페이지 즐겨찾기