(6) 면접

2305 단어
singtelon 단례 모델은 단자 모델이라고도 부르며 자주 사용하는 소프트웨어 디자인 모델이다.이 모델을 응용할 때, 단일 대상의 클래스는 반드시 하나의 실례만 존재할 것을 보장해야 한다.많은 경우 전체 시스템은 하나의 전체적인 대상만 가지면 시스템 전체의 행위를 조율하는 데 유리하다.예를 들어 어떤 서버 프로그램에서 이 서버의 설정 정보는 하나의 파일에 저장되고 이러한 설정 데이터는 하나의 단일 대상이 통일적으로 읽은 다음에 서비스 프로세스의 다른 대상이 이 단일 대상을 통해 이러한 설정 정보를 얻는다.이런 방식은 복잡한 환경에서 배치 관리를 간소화시켰다.
단일 모드를 실현하는 사고방식은 하나의 클래스가 대상의 인용(영원히 동일)과 이 실례를 얻을 수 있는 방법(정적 방법이어야 하며 getInstance라는 이름을 사용합니다)이다.우리가 이 방법을 호출할 때, 클래스가 가지고 있는 인용이 비어 있지 않으면 이 인용을 되돌려주고, 클래스가 유지하고 있는 인용이 비어 있으면 클래스의 실례를 만들고, 실례의 인용을 클래스가 유지하고 있는 인용에 부여한다.또한 우리는 이 클래스의 구조 함수를 사유 방법으로 정의하여 다른 곳의 코드는 이 클래스의 구조 함수를 호출하여 이 클래스의 대상을 실례화할 수 없고, 이 클래스가 제공하는 정적 방법을 통해서만 이 클래스의 유일한 실례를 얻을 수 있다.
단일 모드는 다중 라인의 응용 장소에서 반드시 조심스럽게 사용해야 한다.만약에 유일한 실례가 만들어지지 않았을 때 두 개의 라인이 동시에 생성 방법을 호출한다면 그들은 유일한 실례의 존재를 동시에 감지하지 못하고 각각 하나의 실례를 만들었다. 그러면 두 개의 실례가 구조되어 하나의 실례 모델에서 유일한 원칙을 위반하게 된다.이 문제를 해결하는 방법은 클래스가 이미 실례화된 변수를 지시하기 위해 상호 배척 자물쇠를 제공하는 것이다. (비록 이렇게 하면 효율을 떨어뜨릴 수 있지만.)
일반적으로 단일 예제 모드는 Java 언어에서
게으름뱅이 방식.전체 국면을 가리키는 단례 실례가 처음 사용될 때 구축된다
4
  • 아사자 방식.클래스가 로드될 때 만들어지는 전역적인 단일 인스턴스를 나타냅니다

  • Java 언어에서는 다음 코드와 같이 단일 예제 모드(굶주림 모드)가 적용됩니다.
      public class Singleton {
        private final static Singleton INSTANCE = new Singleton();
      
        // Private constructor suppresses   
        private Singleton() {}
     
        // default public constructor
        public static Singleton getInstance() {
            return INSTANCE;
        }
      }
    

    자바 프로그래밍 언어에서 단일 모드(게으름뱅이 모드) 응용의 예는 다음과 같다(이 방법은 JDK5 및 이후 버전에만 사용할 수 있다(INSTANCE가volatile로 명시됨). 이전 버전에서'이중 검사 자물쇠'를 사용하면 예상치 못한 행위가 발생할 수 있다[1]).
      public class Singleton {
        private static volatile Singleton INSTANCE = null;
      
        // Private constructor suppresses 
        // default public constructor
        private Singleton() {}
      
        //thread safe and performance  promote 
        public static  Singleton getInstance() {
            if(INSTANCE == null){
                 synchronized(Singleton.class){
                     //when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be checked again.
                     if(INSTANCE == null){ 
                         INSTANCE = new Singleton();
                      }
                  } 
            }
            return INSTANCE;
        }
      }
    

    좋은 웹페이지 즐겨찾기