디자인 모델 소개 2: 단일 모델 (Singleton)

먼저 가장 간단 하고 가장 흔히 볼 수 있 는 디자인 모델: singleton (단일 사례) 을 소개 합 니 다.
    의도
  • 하나의 인 스 턴 스 만 있 고 전체 방문 점
  • 을 제공 합 니 다.
        이미 알 고 있 는 응용 예
  • Qt, QCoreApplication
  • Java, Runtime.getRuntime()

  •     흔 한 문제
  • 다 중 스 레 드 재 입 과 경쟁 은 2 개 또는 여러 개의 인 스 턴 스 가 구축 된다
  • .
  • 적절 한 시기 석방 사례 를 찾 지 못 하면 atexit
  • 를 고려 할 수 있다.
        적용 환경
  • 특정한 종 류 는 하나의 인 스 턴 스 만 있어 야 하고 고객 에 게 방문 해 야 한다
  • .
  • 인 스 턴 스 는 이불 류 를 확장 할 수 있 지만 고객 은 이 로 인해 코드 를 수정 할 필요 가 없다
  • .
        단 례 의 경전 실현
        로 딩 지연 사례 를 제공 합 니 다.헤더 파일 은 다음 과 같 습 니 다:
    class Singleton {
    public:
        Singleton * instance();
    protected:
        Singleton();
    private:
        static Singleton * _instance;
    };
        원본 파일 은 다음 과 같 습 니 다:
    Singleton * Singleton::_instance = 0;
    Singleton * Singleton::instance()
    {
        if(!_instance)
        {
            _instance = new Singleton();
        }
        return _instance;
    }

       
    문제 토론
        위의 실현 에는 몇 가지 흔히 볼 수 있 는 문제 가 토론 해 야 한다.
        첫 번 째 는 다 중 스 레 드 가 가 져 온 문제 입 니 다. 만약 에 우리 가 2 개 이상 의 스 레 드 에서 Singleton: instance () 방법 을 호출 하면 스 레 드 A 에서 if 문 구 를 실행 한 후에 스 레 드 전환 이 발생 하고 B 로 전환 합 니 다. 스 레 드 B 에서 if 문 구 를 실행 한 후에 다시 스 레 드 전환 이 발생 하고 C 로 전환 합 니 다.기껏해야 스 레 드 수 와 상당 한 인 스 턴 스 가 나타 나 고 모든 스 레 드 는 함수 인 스 턴 스 () 가 처음 호출 된 후에 다른 인 스 턴 스 로 돌아 갑 니 다.이 문 제 는 두 가지 해결 방법 이 있 는데 그것 이 바로 자 물 쇠 를 채 우거 나 이중 검 측 이다.
        먼저 자 물 쇠 를 채 우 는 것 은 논리 적 으로 문제 가 없고 실행 가능 하 다.하지만 성능 문제 가 있어 추천 하지 않 습 니 다.
        이중 검 측 의 기본 사상 은 두 번 의 비 공 판단 을 하 는 것 입 니 다. if 이후 에 다시 if 를 하 는 것 입 니 다. 여러분 은 구 글 을 할 수 있 습 니 다.
        두 번 째 는 대상 복사 입 니 다. 위의 실현 은 복사 구조 함수, 할당 연산 자 를 개인 적 으로 설정 하지 않 고 실현 하지 않 습 니 다. 그러면 고객 프로그래머 가 singleton 인 스 턴 스 를 할당 할 수 있 습 니 다.
        --------
        자, 사례 는 여기까지 소개 합 니 다. 대부분 상황 에서 사례 는 다른 디자인 모델 과 함께 사용 합 니 다. 예 를 들 어 공장 모델, 우 리 는 공장 을 하나의 사례 로 실현 할 것 입 니 다.

    좋은 웹페이지 즐겨찾기