소프트웨어 디자인 모델 의 단일 예 모델

2236 단어
디자인 모델 의 단일 예 모델
정의.
하나의 클래스 에 하나의 인 스 턴 스 만 있 고 전체 액세스 점 을 제공 합 니 다.
유형
창설 형
필드 사용
어떤 상황 에서 도 인 스 턴 스 가 하나 밖 에 없다 는 것 을 확인 하고 싶 습 니 다.
장점.
메모리 에 하나의 인 스 턴 스 만 있어 서 메모리 비용 을 줄 였 다.자원 에 대한 다 중 점용 을 피 할 수 있다.전역 접근 점 을 설정 하여 접근 을 엄 격 히 통제 합 니 다.
결점.
인터페이스 가 없어 확장 이 어렵 습 니 다.
중점
  • 사유 구조 기
  • 스 레 드 안전
  • 로드 지연, 사용 하고 싶 을 때 다시 만 들 기
  • 직렬 화 와 반 직렬 화 안전
  • 반사: 반사 공격 방지
  • 실 용 기능
  • 역 컴 파일
  • 메모리 원리
  • 다 중 스 레 드 디버그
  • 관련 디자인 모드
  • 단일 모델 과 공장 모델
  • 단일 모델 과 향 원 모델
  • 게으름뱅이 모드
    필요 할 때 만 대상 을 예화 하 다.그러나 이런 모델 에는 라인 안전 문제 가 존재 할 수 있다.
    전통 게으름뱅이 모드
    코드 는 다음 과 같 습 니 다:
    public class LazySingleton {
        private static LazySingleton lazySingleton = null;
    
        /**
         *      
         */
        private LazySingleton() {
    
        }
    
        public static LazySingleton getInstance() {
            if (lazySingleton == null) {
                lazySingleton = new LazySingleton();
            }
            return lazySingleton;
        }
    }

    이중 검사 게으름뱅이 모드
    public class LazyDoubleCheckSingleton {
    
        private static volatile LazyDoubleCheckSingleton lazyDoubleCheckSingleton = null;
    
        private LazyDoubleCheckSingleton() {
    
        }
    
        public static LazyDoubleCheckSingleton getInstance() {
            if (lazyDoubleCheckSingleton == null) {
                synchronized (LazyDoubleCheckSingleton.class) {
                    if (lazyDoubleCheckSingleton == null) {
                        lazyDoubleCheckSingleton = new LazyDoubleCheckSingleton();
                    }
                }
            }
            return lazyDoubleCheckSingleton;
        }
    }

    JVM 생 성 대상 은 다음 과 같은 몇 가지 단계 가 있 습 니 다.
    1. 대상 에 게 메모리 공간 분배 하기;2. 대상 초기 화;3. 설정 은 방금 분 배 된 메모리 주 소 를 가리킨다.4. 첫 방문 대상.
    그러나 실제 대상 을 만 드 는 과정 에서 2, 3 두 단 계 는 명령 을 다시 배열 할 수 있다. 즉, 3, 2 의 순 서 를 먼저 집행 하 는 것 이다. 이런 변 화 는 단일 스 레 드 에서 문제 가 없고 실제 다 중 스 레 드 에서 도 큰 문제 가 없 으 며 극단 적 인 상황 에서 만 문제 가 발생 할 수 있다. 다음 그림 과 같다.volatile 두 가지 역할 이 있 습 니 다. 메모리 의 보이 기 쉬 움 과 명령 의 재배 치 금지 입 니 다.이 코드 에 서 는 명령 의 순서 성 을 확보 하여 정렬 을 다시 하지 않 습 니 다.
    케이스
  • 스 레 드 탱크
  • 로그 조작
  • 다음으로 전송:https://www.cnblogs.com/xiaotutu365/p/10367496.html

    좋은 웹페이지 즐겨찾기