단일 모드 의 5 가지 쓰기

3145 단어 디자인 모드
앞에서 말 했 듯 이 단일 모델 은 23 가지 디자인 모델 중에서 가장 간단 한 것 이자 필기시험 면접 에서 가장 자주 고찰 하 는 디자인 모델 이기 때문에 우 리 는 반드시 그것 을 파악 해 야 한다.
1. 굶 주 린 사람 (스 레 드 안전)
/**
 *   
 *
 * @author [email protected]
 * @date 18-6-14   4:52
 */
public class Demo1 {
    private static Demo1 demo1 = new Demo1();

    private Demo1() {

    }

    public static Demo1 getInstance() {
        return demo1;
    }

    public static void main(String[] args) {
        System.out.println(Demo1.getInstance().hashCode());
        System.out.println(Demo1.getInstance().hashCode());
    }
}

2. 게으름뱅이 (라인 이 안전 하지 않 음)

/**
 *         
 *
 * @author [email protected]
 * @date 18-6-14   4:53
 */
public class Demo2 {
    private static Demo2 demo2 = null;

    private Demo2() {

    }

    public static Demo2 getInstance() {
        if (demo2 == null) {
            demo2 = new Demo2();
        }
        return demo2;
    }

    public static void main(String[] args) {
        System.out.println(Demo2.getInstance().hashCode());
        System.out.println(Demo2.getInstance().hashCode());

    }
}

 
3. 게으름뱅이 이중 잠 금 검증 (스 레 드 보안)
/**
 *   2
 *
 * @author [email protected]
 * @date 18-6-14   4:55
 */
public class Demo3 {
    private static volatile Demo3 demo3 = null;

    private Demo3() {
    }

    public static Demo3 getInstance() {
        if (demo3 == null) {
            synchronized (Demo3.class) {
                if (demo3 == null) {
                    demo3 = new Demo3();
                }
            }
        }
        return demo3;
    }

    public static void main(String[] args) {
        System.out.println(Demo3.getInstance().hashCode());
        System.out.println(Demo3.getInstance().hashCode());
    }
}

 
4. 정적 내부 클래스 (스 레 드 안전, 추천)
/**     
 * @author [email protected]
 * @date 18-6-14   4:59
 */
public class Demo4 {
    private Demo4() {
       
    }


    private static class Demo4Instance {
        private static Demo4 demo4 = new Demo4();
    }

    public static Demo4 getInstance() {
        return Demo4Instance.demo4;
    }

    public static void main(String[] args) {
    }

}

정적 내부 클래스 와 외부 클래스 는 동급 이기 때문에 외부 클래스 를 불 러 올 때 내부 클래스 에 영향 을 주지 않 기 때문에 lazy loading 을 실현 합 니 다.또한 정적 변 수 를 이용 하여 Demo 4 가 Demo 4 인 스 턴 스 로 딩 할 때 만 한 번 초기 화 되 어 다 중 스 레 드 가 초기 화 되 지 않도록 하 는 방식 이기 때문에 스 레 드 가 안전 합 니 다. 
5. 매 거 진 (라인 보안) 
/**  
 * @author [email protected]
 * @date 18-6-14   5:02
 */
public enum Demo5 {
   
    getInstance;

    private Demo5Instance demo5Instance;

    public Demo5Instance getDemo5Instance(){
        return demo5Instance;
    }
    
    Demo5() { //      
        demo5Instance = new Demo5Instance();
    }
    
    public static void main(String[] args) {
        Demo5Instance demo5Instance = Demo5.getInstance.getDemo5Instance();
        Demo5Instance demo5Instance2 = Demo5.getInstance.getDemo5Instance();
        System.out.println(demo5Instance2.hashCode());
        System.out.println(demo5Instance.hashCode());
    }

}

class Demo5Instance {

}

좋은 웹페이지 즐겨찾기