一句話解釋:
單一的類,只能自己來建立唯一的一個物件。
單例模式(Singleton Pattern)是日常開發中最簡單的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
這種模式涉及到一個單一的類,該類負責建立自己的物件,同時確保只有一個物件被建立。這個類提供了一種存取其唯一的物件的方式,可以直接存取,不需要範例化該類的物件。
一個比喻:(班主任與學生)
比如一個班級,只有一個班主任,任何一個同學要找班主任,都是找的同一個,班主任忙的時候,當然就出現排隊的情況。
使用場景舉例:
public class Singleton
{
private static Singleton instance = null;
private static object lockObject = new object();
/// <summary>
/// 私有化建構函式,防止外部範例化
/// </summary>
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockObject) // 執行緒同步鎖
{
if (instance == null) // Lazy Initialization
{
instance = new Singleton();
}
}
}
return instance;
}
}
/// <summary>
/// 重置 Singleton
/// </summary>
public void Reset()
{
instance = null;
}
}
測試程式碼:
static void Main(string[] args)
{
var instance1 = Singleton.Instance;
var instance2 = Singleton.Instance;
Console.WriteLine(instance1 == instance2); // 輸出 true
}
public class SingletonParameters
{
private static SingletonParameters instance = null;
private static object lockObject = new object();
private int _firstvalue, _secondvalue;
/// <summary>
/// 私有化建構函式,防止外部範例化
/// </summary>
private SingletonParameters(int first, int second)
{
this._firstvalue = first;
this._secondvalue = second;
}
public static SingletonParameters InstanceParameters(int first, int second)
{
if (instance == null)
{
lock (lockObject) // 執行緒同步鎖
{
if (instance == null) // Lazy Initialization
{
instance = new SingletonParameters(first, second);
}
}
}
else
{
instance.FirstValue = first;
instance.SecondValue = second;
}
return instance;
}
public int FirstValue { get { return _firstvalue; } set { _firstvalue = value; } }
public int SecondValue { get { return _secondvalue; } set { _secondvalue = value; } }
/// <summary>
/// 重置 Singleton
/// </summary>
public void Reset()
{
instance = null;
}
}
測試程式碼:
var instance1 = SingletonParameters.InstanceParameters(1, 2);
Console.WriteLine($"FirstValue:{instance1.FirstValue}");
Console.WriteLine($"SecondValue:{instance1.SecondValue}");
var instance2 = SingletonParameters.InstanceParameters(3, 4);
Console.WriteLine($"FirstValue:{instance2.FirstValue}");
Console.WriteLine($"SecondValue:{instance2.SecondValue}");
Console.WriteLine($"instance1 == instance2 : {instance1 == instance2}");
參考:https://www.cnblogs.com/gaochundong/p/design_pattern_singleton.html
本文來自部落格園,作者:橙子家,微訊號:zfy1070491745,有任何疑問歡迎溝通,一起成長。
轉載本文請註明原文連結:https://www.cnblogs.com/czzj/p/SJMSLL_Singleton.html