單體模式(Singleton Pattern)是爲了保證一個類只能實例化一次,並且提供一個訪問它的全局訪問點。
一般有兩種方法來使用單體模式。
1. 使用一個靜態變量。
2. 使用構造函數判斷。
先是使用靜態變量方法,
我們通過一個實體instance來確定是否當前的類已經被實例化,如果沒有就新增一個Singleton實例。但是這種方法不建議大家使用,如果是個多線程的工具來操作,你的單體概念就會蕩然無存。所以我們需要增加一個object,然後使用一個鎖來鎖定object防止多線程的實例化。也就是上圖中的註釋部分。
Private static readonly object padload = new object();
Lock(padload)
第二種方法是把構造函數設置爲共有的方法。但是通過一個靜態變量的計數器來限制類被實例化兩次。
如果計數器不爲零我們就給它拋出去一個異常。
看看運行結果:
多次實例化Singleton2時:
拋出異常。