C \ # 중 단일 모드 의 몇 가지 실현 방식

9534 단어 디자인 모드
단일 모델 에서 실현 방식 은 다음 과 같은 몇 가지 가 있 는데 자신 이 간단하게 정리 했다.그 중에서 한 번 의 판 공 (단일 스 레 드 환경 에 만 적용) 과 한 번 의 판 공 잠 금 (다 중 스 레 드, 그러나 효율 이 높 지 않 음) 을 통 해 이 두 가지 방법 은 더 이상 말 하지 않 겠 습 니 다. 다음은 개량 후의 방법 만 설명 하 겠 습 니 다.
방법 1: 자 물 쇠 를 넣 고 두 번 의 판 공 을 통 해 단일 모드 를 실현 합 니 다.
 public sealed class SingleTon1
     // sealed                 。   
   {
       private SingleTon1() { }
       private static readonly object MyLock = new object();
       private static SingleTon1 instance = null;
       public static SingleTon1 GetInstance()
       {
           //              
           if (instance == null)
           {
               //                  
               lock (MyLock)
               {
                   //         ,        
                   if (instance == null)
                   {
                       instance = new SingleTon1();
                   }
               }
           }
           return instance;
       }
   }

private SingleTon 1 () {} 구조 함수 의 사유 화 를 설명 합 니 다. 외부 클래스 는 new 를 사용 할 수 없 지만 방법 getInstance () 와 같은 새로운 return 을 사용 하 는 방법 을 써 야 합 니 다.단일 모드 는 다음 과 같은 특징 이 있다. 1. 단일 클래스 는 하나의 실례 만 있 을 수 있다.2. 단일 사례 류 는 자신 이 자신의 유일한 인 스 턴 스 를 만들어 야 합 니 다.3. 단일 클래스 는 모든 다른 대상 에 게 이 인 스 턴 스 를 제공 해 야 합 니 다.세 번 째 점 을 잘 보 려 면 반드시 다른 대상 에 게 제공 해 야 한다. 그렇지 않 으 면 하나의 예 라 고 할 수 없다.
방법 2: C \ # 독특한 특성 을 빌려 정적 변 수 를 이용 하여 단일 모드 를 실현 한다.
   public sealed class SingleTon2
   {
       private SingleTon2() { }
       private static readonly SingleTon2 Instance = new SingleTon2();
       public static SingleTon2 GetInstance()
       {
           return Instance;
       }
   }

만약 에 클래스 에 구조 함 수 를 쓰 지 않 았 다 면 프레임 워 크 는 우리 에 게 구조 함 수 를 만들어 줄 것 입 니 다. 만약 에 우리 가 클래스 에서 정적 변 수 를 정 의 했 지만 정적 구조 함 수 를 정의 하지 않 았 다 면 프레임 워 크 도 우리 가 정적 구조 함 수 를 생 성하 여 프레임 자체 가 호출 하도록 도와 줄 것 입 니 다.
방법 3: 정적 구조 함 수 를 이용 하여 실현 하고 방법 과 이치 가 같다.
 public sealed class SingleTon3
  {
      private SingleTon3() { }
      private static readonly SingleTon3 Instance = null;
      static SingleTon3()
      {
          Instance = new SingleTon3();
      }
      public static SingleTon3 GetInstance()
      {
          return Instance;
      }    
  }

         정적 구조 함 수 는 한 번 만 실행 하고 정적 구조 함수 에서 정적 변 수 를 초기 화하 면 한 번 만 인 스 턴 스 를 초기 화 할 수 있 습 니 다.그러나 싱글 톤 3 를 처음 사용 할 때 정적 구조 함 수 를 실행 하고 인 스 턴 스 를 만 들 필요 가 없 으 면 자원 을 헛되이 낭비 하기 때문에 다음 방법 은
방법 4: 필요 에 따라 인 스 턴 스 를 만 듭 니 다.
  public sealed class SingleTon4
    {
        private SingleTon4() { }
        public static SingleTon4 GetInstance()
        {
            return Nested.Instance;
        }
        //       
        class Nested
        {
            internal static readonly SingleTon4 Instance = null;
            static Nested()
            {
                Instance = new SingleTon4();
            }
        }
    }

         형식 Nested 는 SingleTon 4 GetInstance () 를 호출 할 때 만 사용 되 며, 개인 속성 때문에 다른 사람 은 Nested 형식 을 사용 할 수 없습니다.따라서 GetInstance () 를 통 해 SingleTon 4 의 인 스 턴 스 를 처음 얻 었 을 때 Nested 의 정적 구조 함 수 를 자동 으로 호출 하여 인 스 턴 스 를 만 듭 니 다.만약 에 우리 가 방법 GetInstance () 를 호출 하지 않 으 면. NET 이 실 행 될 때 Nested 를 호출 하지 않 고 인 스 턴 스 를 만 들 지 않 으 며 필요 에 따라 만 들 었 습 니 다.

좋은 웹페이지 즐겨찾기