자바 디자인 모델 학습 의 단일 예 모델 (디자인 모델 을 쉽게 이해)

/**
  • 일부 대상 은 스 레 드 탱크, 캐 시, 하드웨어 장치 등
  • 만 필요 합 니 다.
  • 여러 사례 가 충돌, 결과 의 불일치 성 등 문제 가 발생 할 수 있다
  • 정적 변수 방식 으로 실현 할 수 있 습 니까?
  • 또는 프로그래머 간 에 전체 변 수 를 협상 합 니까?
  • 단일 모드: 하나의 클래스 가 최대 하나의 인 스 턴 스 만 있 도록 확보 하고 전체 방문 점
  • 을 제공 합 니 다.

  • 예 를 들 어 회사 의 프린터 는 하나 밖 에 없다. 만약 에 우리 가 여러 개의 프린터 대상 을 만 들 고 인쇄 명령 을 동시에 내린다 면 우리 가 얻 은 인쇄 결 과 는 혼합 한 결과 일 수 있 기 때문에 단일 디자인 모델 을 사용 해 야 한다. 전체 적 으로 프린터 대상 만 만 만 들 수 있다
  • .
  • 단일 디자인 모델 은
  • 로 나 눌 수 있다.
  •     :                ,        。
    
  •        :         。
    
  •        :         ,  cpu   
    
  •     :           。
    
  •        :            ,  cpu   
    

  • */
    / / 굶 주 림 식
    public class Singleton {
    
        private static  Singleton uniqeInstance = new Singleton();
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            return uniqeInstance;
        }
    
    }
    

    /**
  • 게으름뱅이 식 1:
  • 다 중 스 레 드 환경
  • 방법 을 직접 잠 그 는 단점: 자물쇠 의 범위 가 넓 고 자 물 쇠 를 잠 그 면 소모 가 크다

  • 구조 방법의 사유,
  • 방법 에 synchronized 자물쇠 추가 * /
  • public class Singleton2 {
    
        private static Singleton2 uniqeInstance = null;
    
        private Singleton2() {
        }
    
    
    
        public static synchronized Singleton2 getInstance() {
            if (uniqeInstance == null) {
                uniqeInstance = new Singleton2();
            }
            return uniqeInstance;
        }
    
    }
    

    /**
  • 게으름뱅이 식 2:
  • volatile 키워드,
  • 구조 방법의 민영화
  • 이중 판단 잠 금 추가 * /
  • public class Singleton3 {
    
        private static volatile Singleton3 uniqeInstance = null;
    
        private Singleton3() {
    
        }
    
    
        public static Singleton3 getInstance() {
                if (uniqeInstance == null) {
                    synchronized (Singleton3.class) {
                        if (uniqeInstance == null) {
                            uniqeInstance = new Singleton3();
                        }
                    }
                }
            return uniqeInstance;
        }
    
    }
    

    좋은 웹페이지 즐겨찾기