Singleton Pattern 屬於創造型設計模式,提供一種創建對象的方法,涉及一個單一類的實例,確保一個類只創建一個對象,提供訪問唯一對象的方法,可以直接訪問,不需要創建。 單一類只有一個實例 類必須自己創建自己的實例 給其他調用對象提供訪問該類實例的方法 目的:一個類只創建一個實例 優點:減 ...
Singleton Pattern 屬於創造型設計模式,提供一種創建對象的方法,涉及一個單一類的實例,確保一個類只創建一個對象,提供訪問唯一對象的方法,可以直接訪問,不需要創建。
- 單一類只有一個實例
- 類必須自己創建自己的實例
- 給其他調用對象提供訪問該類實例的方法
目的:一個類只創建一個實例
優點:減少全局使用該類的頻繁創建與銷毀,節省系統資源,避免對資源的多重占用
缺點:沒有藉口,不可以被繼承,與單一職責衝突,一個類應該只關心自己內部邏輯,不關心外部調用實例情況
實例應用:
多進程多線程,操作同一個文件時,多個線程同時操作一個文件的時候,所有文件應該通過同一個實例操作
實現:
- 構造函數是私有的
- 判斷系統是否已經存在該實例,有就返回,無則創建
Code:
public class SingletonObject
{
// 唯一實例
private static SingletonObject singleton;
// 私有構造函數(限制外部實例化)
private SingletonObject()
{
}
// 方式一:
/// <summary>
/// 提供外部獲取該類實例的靜態方法(可帶參數)
/// </summary>
/// <returns>SingletonObject</returns>
public static SingletonObject getInstance1()
{
if (singleton == null)
singleton = new SingletonObject();
return singleton;
}
// 方式二:
// 只讀屬性(無法帶參數)
public static SingletonObject getInstance2
{
get
{
if (singleton == null)
singleton = new SingletonObject();
return singleton;
}
}
/// <summary>
/// 類內部方法
/// </summary>
/// <returns></returns>
public string FuncName()
{
return "This is Singleton Pattern";
}
}
外部調用:
string s1 = SingletonObject.getInstance1().FuncName(); // 方法
string s2 = SingletonObject.getInstance2.FuncName(); // 屬性