정적 싱글 톤 모드 에 대한 사용 설명
정적 단일 사례 모드(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();
}
}
테스트 결과