單例模式的特點:
單例模式應用:
singleton模式包含的角色只有乙個,就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new直接例項 它。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance()。instance方法負責檢驗並例項化自己,然後 儲存在靜態成員變數中,以確保只有乙個例項被建立。(關於執行緒問題以及c#所特有的singleton將在後面詳細論述)。
該程式演示了singleton的結構,本身不具有任何實際價值。1//
singleton pattern -- structural example
2using
system;34
//"singleton"
5class
singleton612
13//
methods
14public
static
singleton instance()
1522}23
24/**/
///25
///client test
26///
27public
class
client
2838
}使用singleton模式有乙個必要條件:在乙個系統要求乙個類只有乙個例項時才應當使用單例模式。反過來,如果乙個類可以有幾個例項共存,就不要使用單例模式。
注意:不要使用單例模式訪問全域性變數。這違背了單例模式的用意,最好放到對應類的靜態成員中。
不要將資料庫連線做成單例,因為乙個系統可能會與資料庫有多個連線,並且在有連線池的情況下,應當盡可能及時釋放連線。singleton模式由於使用靜態成員儲存類例項,所以可能會造成資源無法及時釋放,帶來問題。
下面這段singleton**演示了負載均衡物件。在負載均衡模型中,有多台伺服器可提供服務,任務分配器隨機挑選一台伺服器提供服務,以確保任務均衡(實際情況比這個複雜的多)。這裡,任務分配例項只能有乙個,負責挑選伺服器並分配任務。
**1//singleton pattern -- real world example 23
using
system;
4using
system.collections;
5using
system.threading;67
//"singleton"
8class
loadbalancer925
26//
methods
27public
static
loadbalancer getloadbalancer()
2843
return
balancer;44}
4546
//properties
47public
string
server
4855}56
}5758/**/
///59
///60
///61
///62
public
class
6381
}c#的獨特語言特性決定了c#擁有實現singleton模式的獨特方法。這裡不再贅述原因,給出幾個結果:
方法一:
下面是利用.net framework平台優勢實現singleton模式的**:
1sealed
class
singleton
2這使得**減少了許多,同時也解決了執行緒問題帶來的效能上損失。那麼它又是怎樣工作的呢?
注意到,singleton類被宣告為sealed,以此保證它自己不會被繼承,其次沒有了instance的方法,將原來_instance成員 變數變成public readonly,並在宣告時被初始化。通過這些改變,我們確實得到了singleton的模式,原因是在jit的處理過程中,如果類中的static屬 性被任何方法使用時,.net framework將對這個屬性進行初始化,於是在初始化instance屬性的同時singleton類例項得以建立和裝載。而私有的建構函式和 readonly(唯讀)保證了singleton不會被再次例項化,這正是singleton設計模式的意圖。
不過這也帶來了一些問題,比如無法繼承,例項在程式一執行就被初始化,無法實現延遲初始化等。
詳細情況可以參考微軟msdn文章:《exploring the singleton design pattern》
方法二:
既然方法一存在問題,我們還有其它辦法。
**1public
sealed
class
singleton26
7public
static
singleton getinstance()811
12class
nested
1319
20internal
static
readonly
singleton instance
=new
singleton();21}
22}
單件模式(單例模式)
readme 0.1 本文部分描述 head first 設計模式 旨在學習 單件模式 單例模式 的相關知識 及其應用 單件模式 1.0 單件模式的應用背景 有一些物件其實我們只需要乙個,比方說 執行緒池,快取,對話方塊,登錄檔等的物件,這都可以通過單件模式來解決 1.1 定義 確保乙個類只有乙個例...
單件模式(單例模式)
1 單件模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。2 經典的單件模式實現 public class singleton public static singleton getinstance return uniqueinstance 問題點 public static singleto...
單例模式(單件模式)
color red size medium 單件模式,就是確保乙個類只有乙個例項,並提供乙個全域性訪問點。size color 單例的作用是獨一無二,比方說,如果有乙個登錄檔設定的物件,你不希望這樣的物件有多個拷貝吧,那會把設定搞得一團亂,利用像單例這樣的單件物件,可以確保程式中使用的全域性資源只有...