單例模式的幾種解法
所謂的單例模式,就是我們設計乙個類,使這個類每次只能例項化乙個物件,即保證該類僅有乙個例項。
單例模式的好處有:
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方法負責檢驗並例...