單例模式 Singleton模式的幾種解法分析

2021-07-15 17:48:10 字數 1745 閱讀 3541

單例模式的幾種解法

所謂的單例模式,就是我們設計乙個類,使這個類每次只能例項化乙個物件,即保證該類僅有乙個例項。

單例模式的好處有:

1,對唯一例項的受控訪問,可以嚴格控制使用者怎樣以及何時去使用它。

2,縮小名字空間,只有乙個例項,避免了多個例項名字引起的一些問題,也可看作是對全域性變數的一種改進。

3,允許對操作和表示的精化,單例模式的類也有子類,用這個子類的物件來配置乙個應用還是比較容易的。

4,允許可變數目的例項

5,比類操作更加靈活

解法一,只適合單執行緒環境

public sealed class singleton

private static singleton instance = null;

public static singleton instance }

};

singleton 的靜態屬性instance中,只有在instance 為null的時候才建立乙個例項以避免重複建立,該演算法只適用於單執行緒環境

解法二,適合多執行緒環境,但效率不高

public class sealed class singleton

private static readonly object syncobj = new object();

private static singleton instance = null;

public static singleton instance()

return instance;

} }};

該解法通過加乙個同步鎖,當乙個執行緒加上同步鎖,建立了例項的時候,其他執行緒只能等待第乙個執行緒釋放了這個同步鎖才能建立例項,同步鎖保證了多執行緒環境中也只能得到乙個例項,但加鎖是非常耗時的操作

解法三,適合多執行緒環境,提高了效率

//加同步鎖前後判斷例項是否存在

public sealed class singleton

private static object syncobj = new object();

private static static singleton instance = null;

public static singleton instance

}return instance;

} }};

該解法通過在加鎖之前對例項進行判斷,因為當例項已經建立了之後,就不需要進行加鎖操作了,該演算法既滿足了多執行緒環境中只能得到乙個例項,也提高了效率

解法四,高效的解法:適合多執行緒環境,真正做到了按需建立

//按需建立例項

public sealed class singleton

public static singleton instance }

class nested

internal static readonly singleton instance = new singleton();

}};

通過在sinleton內部定義乙個私有型別的nested,當第一次用到這個巢狀型別的時候,會呼叫靜態建構函式建立的singleton的例項instance。型別nested只有在屬性singleton.instance中被用到,由於奇私有屬性他人無法用到,因此我們不呼叫singleton的例項時,就不會觸發.net 執行時呼叫nested,真正的做到了按需建立

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...