[작업 중인 디자인 모드] 단일 모드 singleton.

5033 단어
1. 모드 해석:
단일 모델 은 가장 간단 하고 자주 사용 하 는 디자인 모델 이다. 면접 을 볼 때 새로 졸업 한 학생 이 든 이미 여러 해 동안 일 한 통 이 든 단일 모델 에 대해 서 는 기본적으로 두 마디 할 수 있다.단일 사례 모델 은 주로 다음 과 같은 측면 에 나타난다.
1. 클래스 의 구조 함수 사유 화, 외부 에서 구조 함수 생 성 클래스 의 인 스 턴 스 를 직접 사용 할 수 없 도록 합 니 다.
2. 인 스 턴 스 를 가 져 오 는 방법 을 제공 합 니 다. 외부 에 서 는 이 방법 을 통 해 이미 만 든 인 스 턴 스 대상 을 가 져 올 수 있 습 니 다.
3. 인 스 턴 스 를 얻 는 방법 은 인 스 턴 스 의 유일 성 을 확보 해 야 합 니 다.
4. 인 스 턴 스 를 얻 는 방법 에 따라 유일 성 을 확보 하 는 방식 으로 단일 모델 은 다음 과 같은 몇 가지 로 나 뉜 다.
모드 코드
1. 게으름뱅이 모드
/**
 *     -    
 *               ,                    。
 *               ,             
 * @author zjl
 *
 */
public class Singleton1 {
    //      
    private static Singleton1 singleton;
    //
    private Singleton1(){
        
    }
    /**
     * public  ,       ,        
     *           ,            
     * @return       
     */
    public static synchronized Singleton1 getInstance(){
        if(singleton==null){
            singleton=new Singleton1();
        }
        return singleton;
    }
}

게으름뱅이 모드 는 대상 의 게 으 름 로드 를 실현 하 였 으 나, 단점 은 getInstance 에 동기 화 키 워드 를 추가 하여 이 방법 은 하나의 스 레 드 만 접근 할 수 있 고 효율 이 비교적 낮 다 는 것 이다.
2. 게으름뱅이 모드 의 속도 문 제 를 해결 하기 위해 검 측 을 도입 한다. 즉, 자 물 쇠 를 채 우기 전에 먼저 판정 을 하고 인 스 턴 스 를 volatile 로 성명 한다.
public class Singleton {
    private volatile static Singleton instance; //    volatile
    private Singleton (){}

    public static Singleton getSingleton() {
        if (instance == null) {                         
            synchronized (Singleton.class) {
                if (instance == null) {       
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
   
}

3. 치 한 모드
/**
 *          
 *            ,       ,        ,             
 * @author zjl
 *
 */
public class Singleton2 {
    /**
     *       ,           
     */
    private Singleton2(){}
    //
    private static Singleton2 singleton=new Singleton2();
    
    /**
     *            
     * @return     
     */
    public static Singleton2 getInstance() {
        return singleton;
    }
}

치 한 모드 에 서 는 스 레 드 동기 화 문제 가 존재 하지 않 지만 게 으 른 로 딩 이 아 닌 것 이 단점 입 니 다. 대상 이 생 성 되면 바로 인 스 턴 스 를 만 듭 니 다.
4. 정적 내부 클래스
/**
 *             
 * @author zjl
 *
 */
public class Singleton3 {
    //
    private Singleton3(){};
    //
    private static class SingletonHodler{
        private static final Singleton3 INSTANCE=new Singleton3();
    }
    /**
     *       ,          
     * @return
     */
    public static final Singleton3 getInstance(){
        return SingletonHodler.INSTANCE;
    }
}

정적 내부 클래스 를 만 드 는 방법 은 많이 사용 되 지 않 고 면접 에서 잘 알 지 못 하지만 가장 추천 하 는 방법 입 니 다. 게 으 른 로 딩 을 실 현 했 기 때문에 스 레 드 가 안전 하고 jdk 버 전에 의존 할 필요 가 없습니다.
3. 응용 장면
단일 모드 는 프레임 워 크 에서 많이 응용 된다. 예 를 들 어 spring 의 bean 관 리 는 단일 모드 인지, 데이터 베이스 대상 의 예화 여 부 를 설정 할 수 있다.
장면 코드
비교적 간단 하기 때문에 생략 하 다.

좋은 웹페이지 즐겨찾기