면접 관: 네가 아 는 단 례 모드 를 몇 가지 써 라!자바 가 단일 모드 를 실현 하 는 데 는 몇 가지 방식 이 있 습 니까?3,5?굶 주 린 놈, 게으름뱅이!?

19647 단어 디자인 모드
면접 관: 네가 아 는 단 례 모드 를 몇 가지 써 라!자바 가 단일 모드 를 실현 하 는 데 는 몇 가지 방식 이 있 습 니까?3,5?굶 주 린 놈, 게으름뱅이!?
면접 에서 자주 사례 모델 의 문 제 를 만 날 수 있 습 니 다. 걸핏하면 몇 가지 사례 모델 을 알 고 있 습 니 다. 당신 이 알 고 있 는 사례 모델 을 손 으로 써 보 세 요. 이 문 제 를 철저히 해결 하기 위해 본 고 는 사례 모델 의 가장 완전한 8 가지 쓰기 와 회향 두 의 희 자의 네 가지 쓰기 (수 동 개 머리) 를 상세히 논술 하고 존재 하 는 우열 을 비교 하고 자 합 니 다.본문 이 도움 이 된다 면 좋아요, 뽀뽀.
  • 디자인 모델 (Design Pattern) 이 무엇 입 니까?디자인 모델 은 인류 가 각종 문 제 를 해결 할 때 총 결 한 유용 한 경험 으로 소프트웨어 공학 에서 특유 한 개념 이 아니다.구체 적 으로 보면 디자인 모델 은 일종 의 사상 으로 특정한 문 제 를 해결 하 는 통용 방안 으로 가장 좋 은 실천 을 대표 하 는 동시에 선인 들 이 상당 한 시간 동안 의 실험 과 실 수 를 통 해 분석 하고 정리 한 것 이다.
  • 분류: 디자인 모델 은 모두 세 가지 로 나 뉘 는데 모두 23 가지 이다.
  • 창설 형: 단일 모델, 추상 공장 모델, 원형 모델, 건설 자 모델, 공장 모델
  • 구조 형: 어댑터 모델, 브리지 모델, 장식 자 모델, 조합 모델, 외관 모델, 향 원 모델, 대리 모델
  • 행위 형: 템 플 릿 방법 모델, 명령 모델, 방문 자 모델, 교체 기 모델, 관찰자 모델, 중개자 모델, 비망록 모델, 해석 기 모델, 상태 모델, 전략 모델, 직책 체인 모델 (책임 체인 모델)

  • 본문 시작
  • 단일 모델 의 단일 모델 은 특정한 실현 방식 을 통 해 전체 소프트웨어 시스템 에서 특정한 유형 에 대해 하나의 대상 인 스 턴 스 만 존재 하고 이 유형 은 이 대상 의 인 스 턴 스 를 얻 는 정적 방법 만 제공 하 는 것 이다.
    응용 필드:
    1. 예 를 들 어 윈도 우즈 의 자원 관리자, 같은 윈도 우즈 에서 두 개의 자원 관리 자 를 동시에 열 수 없습니다.
    2. 데이터베이스 연결 탱크 는 데이터베이스 연결 이 일종 의 데이터베이스 자원 이기 때문에 데이터베이스 연결 을 열거 나 닫 는 데 발생 하 는 손실 을 절약 하기 위해 단일 모델 의 사용 이 특히 중요 하 다.
    3. Spring 이 bean 에 대한 관 리 는 scope 를 통 해 이 bean 이 단일 예 (singleton) 인지 여러 예 (prototype) 인지 선택 할 수 있 습 니 다.
    다시 말하자면 단일 모델 은 소프트웨어 공학 에서 사용 하 는 것 이 비교적 빈번 하 다. 면접 에서 면접 관 이 당신 을 마음 에 들 게 하고 업무 중 에 능숙 하 게 활용 할 수 있 도록 다음은 코드 방식 을 통 해 단일 모델 의 8 가지 실현 방식 을 상세 하 게 소개 한다.단일 모드 의 8 가지 실현 방식
  • 굶 주 린 식 (정적 상수)
  • 굶 주 린 식 (정적 코드 블록)
  • 게으름뱅이 식 (스 레 드 가 안전 하지 않 음)
  • 게으름뱅이 식 (스 레 드 안전, 동기 화 방법 실현)
  • 게으름뱅이 식 (스 레 드 안전, 동기 코드 블록 실현)
  • 이중 검사 (Double Check)
  • 정적 내부 클래스
  • 매 거 진
  • Java 실현
  • 1. 굶 주 림 식 (정적 상수)
    단계:
    ① 사유 화 구조 기, 외부 통과 방지 new 인 스 턴 스 생 성
    ② 같은 유형의 상수 를 제공 하여 내부 인 스 턴 스 를 받 을 수 있 습 니 다.
    ③ 생 성 된 인 스 턴 스 를 얻 기 위해 외부 호출 방법 public 을 제공 합 니 다.
    public class Singleton {
    
        //1、      ,    new    
        private Singleton() {
    
        }
    
        //2、    Singleton     ,    Singleton    
        private final static Singleton instance = new Singleton();
    
        //3、    public         ,      
        public static Singleton getInstance() {
            return instance;
        }
    }
    
  • 장점:
    실현 이 비교적 간단 하고 상수, 즉 클래스 로 딩 할 때 실례 화 를 완성 하 는 것 으로 정의 된다.ClassLoader 체 제 를 통 해 스 레 드 안전 문 제 를 피 했다.
  • 단점:JVM 로 딩 류 의 방식 에 따 르 면 로 딩 기 는 특정한 종류 가 주동 적 으로 사 용 될 때 까지 기다 릴 필요 가 없다 는 것 을 알 게 되 었 다. JVM 로 딩 기 는 특정한 종류 가 사 용 될 것 이 라 고 예상 할 때 미리 불 러 올 수 있 기 때문에 로 딩 은 불확실 한 행위 이다. 이런 굶 주 린 방식 은 로 딩 할 때 정례 화 되 기 때문에 게 으 른 로 딩 에 이 르 지 못 한다.Lazy Loading 의 효과 입 니 다. 메모리 낭 비 를 초래 할 수 있 습 니 다.

  • 2. 굶 주 림 식 (정적 코드 블록)
    단계:
    ① 사유 화 구조 기, 외부 통과 방지 new 인 스 턴 스 생 성
    ②, 정의 static 인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.
    ③ 정적 코드 블록 을 통 해 대상 인 스 턴 스 생 성
    ④, 생 성 된 인 스 턴 스 를 얻 기 위해 외부 호출 방법 public 을 제공 합 니 다.
    public class Singleton {
        //1、      ,    new    
        private Singleton(){
    
        }
    
        //2、          
        private static Singleton instance;
    
        //3、             
        static {
            instance = new Singleton();
        }
    
        //4、    public         ,      
        public static Singleton getInstance(){
            return instance;
        }
    }
    
  • 이 방법의 장단 점 은 같다 (메모리 낭 비 를 초래 할 수 있다)
  • 3. 게으름뱅이 식 (라인 이 안전 하지 않 음)
    단계:
    ① 사유 화 구조 기, 외부 통과 방지 new 인 스 턴 스 생 성
    ②, 정의 static 인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.
    ③ 외부 호출 을 통 해 생 성 된 인 스 턴 스 를 얻 을 수 있 는 public 방법 을 제공 합 니 다. 먼저 이 인 스 턴 스 가 생 성 되 었 는 지 여 부 를 판단 하고 생 성 되 었 으 면 직접 사용 합 니 다. 그렇지 않 으 면 예화 되 어 생 성 됩 니 다.
      public class Singleton {
      
          //1、      ,    new    
          private Singleton(){
              
          }
          
          //2、    static          
          private static Singleton instance;
          
          //3、    public         ,      
          public static Singleton getInstance(){
              if (null == instance)
                  instance = new Singleton();
              return instance;
          }
      
      }
    
  • 장점:
    간단 하고 게 으 른 로 딩 가능 (Lazy Loading)
  • 단점:if (null == instance) 이 코드 는 다 중 스 레 드 환경 에서 스 레 드 가 안전 하지 않 은 문제 가 존재 합 니 다. 여러 개의 인 스 턴 스 를 생 성하 여 단일 모델 을 파괴 할 수 있 습 니 다. 실제 개발 에 서 는 이러한 방식 을 사용 하지 마 십시오.

  • 4. 게으름뱅이 식 (스 레 드 안전, 동기 화 방법 실현)
    단계:
    ① 사유 화 구조 기, 외부 통과 방지 new 인 스 턴 스 생 성
    ②, 정의 static 인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.
    ③ 외부 호출 을 통 해 생 성 된 인 스 턴 스 를 얻 고 public 자 물 쇠 를 추가 하 는 synchronized 방법 을 제공 합 니 다. 먼저 이 인 스 턴 스 가 생 성 되 었 는 지 여 부 를 판단 하고 생 성 되 었 으 면 직접 사용 합 니 다. 그렇지 않 으 면 예화 되 어 생 성 됩 니 다.
      public class Singleton {
      
          //1、      ,    new    
          private Singleton(){
              
          }
          
          //2、    static          
          private static Singleton instance;
          
          //3、    public         ,  synchronized  ,      
          public static synchronized Singleton getInstance(){
              if (null == instance)
                  instance = new Singleton();
              return instance;
          }
      
      }
    
  • 장점:
    게으름뱅이 식 으로 라인 안전 문 제 를 해결 했다.
  • 단점:
    synchronized 잠 금 을 통 해 다 중 스 레 드 환경 에서 대상 의 인 스 턴 스 를 얻 는 효율 이 매우 낮 기 때문에 실제 개발 은 추천 하지 않 습 니 다.

  • 5. 게으름뱅이 식 (스 레 드 가 안전 하지 않 고 동기 코드 블록 실현)
    단계:
    ① 사유 화 구조 기, 외부 통과 방지 new 인 스 턴 스 생 성
    ②, 정의 static 인 스 턴 스 대상 은 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 받 는 데 사 용 됩 니 다.
    ③ 외부 호출 에 Public 방법 을 정의 하고 synchronized 동기 코드 블록 에 자 물 쇠 를 추가 하여 인 스 턴 스 대상 을 가 져 옵 니 다.
      public class Singleton {
      
          //1、      ,    new    
          private Singleton(){
              
          }
          
          //2、    static          
          private static Singleton instance;
          
          //3、    public         ,  synchronized       ,      
          public static Singleton getInstance(){
              if (null == instance)
                  synchronized (Singleton.class){
               		instance = new Singleton();
                }
              return instance;
          }
      
      }
    
  • 단점:
    synchronized 코드 블록 잠 금 을 통 해 스 레 드 가 안전 하지 않 습 니 다. 실제 개발 은 추천 하지 않 습 니 다.

  • 6. 이중 검사
    단계:
    ① 사유 화 구조 기, 외부 통과 방지 new 인 스 턴 스 생 성
    ②, 정의 volatile 인 스 턴 스 대상 은 인 스 턴 스 대상 의 가시 성 을 확보 하고 정적 코드 블록 생 성 된 내부 인 스 턴 스 를 수신 하 는 데 사 용 됩 니 다.
    ③ Public 방법 을 정의 하여 외부 호출 에 제공 하고 인 스 턴 스 대상 을 가 져 오 는 동시에 내부 에서 두 번 판단 하고 두 번 째 는 synchronized 코드 블록 에 자 물 쇠 를 추가 합 니 다. 예화 에 성공 하면 잠 금 밖의 스 레 드 는 volatile 을 통 해 인 스 턴 스 를 얻 을 수 있 습 니 다.
      public class Singleton {
        
        //1、      ,    new    
        private Singleton(){
    
        }
    
        //2、  volatile    ,       
        private static volatile Singleton instance;
        
        //3、    public         ,      ,          synchronized     
        public static Singleton getInstance(){
            if (null == instance)
                synchronized (Singleton.class){
                    if (null == instance)
                        instance = new Singleton();
                }
            return instance;
        }
    
    }
    
  • 장점:
    게 으 른 로 딩 실현 Lazy Loading이중 검사, 라인 안전 확보
    실례 화 코드 는 한 번 만 실행 하고 다 중 라인 뒤에 다시 접근 할 때 volatile 알림 을 통과 할 수 있 습 니 다.

  • 추천
    7. 정적 내부 클래스
    단계:
    ① 사유 화 구조 기, 외부 통과 방지 new 인 스 턴 스 생 성
    ② 、 정적 내부 클래스 의 속성 을 통 해 Singleton 인 스 턴 스 획득
    ③ 외부 호출 에 제공 하 는 public 방법 을 정의 하여 인 스 턴 스 대상 을 가 져 옵 니 다.
      public class Singleton {
    
        //1、      ,    new    
        private Singleton(){
    
        }
    
        //2、            Singleton  
        private static class SingletonInstance{
            private static Singleton INSTANCE = new Singleton();
        }
    
        //3、    public         ,      
        public static Singleton getInstance(){
            return SingletonInstance.INSTANCE;
        }
    
    }
    
  • 장점:
    게 으 른 로 딩 실현 Lazy LoadinggetInstance() 방법 이 처음 호출 되 었 을 때 만 가상 컴퓨터 로 딩 SingletonInstance 류 를 초래 할 수 있 고, 클래스 의 정적 속성 은 첫 번 째 로 딩 류 를 초기 화 할 수 있 기 때문에 이러한 방식 은 JVM 의 로 딩 체 제 를 통 해 스 레 드 안전 을 확보 할 수 있다.

  • 추천
    8. 매 거
    단계:
    ①, 매 거 진 속성 을 통 해 이 루어 진다.
      public enum Singleton {
        INSTANCE;
        public void hello(){
            System.out.println("hello");
        }
    }
    
  • 장점:
    스 레 드 안전, 간단 실현
    역 직렬 화 를 방지 하고 새로운 대상 을 다시 만 듭 니 다.

  • 강력 추천 합 니 다.
    총결산
    단일 모드 는 시스템 메모리 에 한 개의 대상 만 존재 하고 시스템 자원 을 절약 할 수 있 음 을 보증 합 니 다. 자주 소각 해 야 하 는 대상 에 대해 단일 모드 를 사용 하면 시스템 성능 을 크게 향상 시 킬 수 있 습 니 다. 예 를 들 어 데이터 베이스 연결 탱크, session 공장 등 입 니 다.
    윤회

    좋은 웹페이지 즐겨찾기