정적 싱글 톤 모드 에 대한 사용 설명

2578 단어 singleton 모드
정적 단일 모드 는 무엇 입 니까?
정적 단일 사례 모드(Static Singleton Pattern)는 제 가 실천 에서 정리 한 모델 입 니 다.주로 해결 하 는 문 제 는 특정한 의존 항목 이 단일 사례 로 응용 되 는 것 을 미리 알 았 을 때 정적 캐 시 를 통 해 이 의존 항목 에 접근 하 는 것 입 니 다.물론 이 문 제 를 해결 하 는 방법 은 많 지만 그 중 하나 일 뿐이다.
디 테 일 실현

/// <summary>
  ///
  /// </summary>
  /// <typeparam name="TClass"> </typeparam>
  public static class Singleton<TClass> where TClass : class, new()
  {
    private static readonly object _lock = new object();
    private static TClass _instance = default(TClass);

    /// <summary>
    ///
    /// </summary>
    public static TClass GetInstance()
    {
      return Instance;
    }

    /// <summary>
    ///
    /// </summary>
    public static TClass Instance
    {
      get
      {
        if (_instance == null)
        {
          lock (_lock)
          {
            if (_instance == null)
            {
              _instance = new TClass(); // must be public constructor
            }
          }
        }

        return _instance;
      }
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="instance"> </param>
    public static void Set(TClass instance)
    {
      lock (_lock)
      {
        _instance = instance;
      }
    }

    /// <summary>
    ///
    /// </summary>
    public static void Reset()
    {
      lock (_lock)
      {
        _instance = default(TClass);
      }
    }
  }

응용 테스트

class Program
  {
    interface IInterfaceA
    {
      string GetData();
    }
    class ClassA : IInterfaceA
    {
      public string GetData()
      {
        return string.Format("This is from ClassA with hash [{0}].", this.GetHashCode());
      }
    }
    static void Main(string[] args)
    {
      string data1 = Singleton<ClassA>.GetInstance().GetData();
      Console.WriteLine(data1);
      string data2 = Singleton<ClassA>.GetInstance().GetData();
      Console.WriteLine(data2);

      Console.ReadKey();
    }
  }

테스트 결과

좋은 웹페이지 즐겨찾기