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(); // 屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/8599.html
標籤:設計模式
