所謂的單例模式就是在整個程式的生命週期中,只建立乙個例項。
要實現這種模式可以採用餓漢模式,飽漢模式,雙重鎖模式和懶載入模式。
什麼是餓漢模式呢?
餓漢模式就是很餓很著急,所以類載入時即建立例項物件。在這種情況下無需擔心多執行緒下例項被
多次建立的問題,但是如果有一些例項物件我們是不需要的那麼問題就來了,使用過多的話就會造
程啟動慢的問題;
說了這麼多那麼我們又該如何建立這樣的乙個單例模式呢?
public class hungry
public static hungry getinstance()//直接返回物件引用
}
有餓漢那麼想必就有飽漢。
飽了,所以並不著急產生例項化物件,需要的時候再產生,畢竟需要吃點小吃的時候再去吃東西嘛。
這麼隨意真的好嗎?那麼問題來了在需要的時候就產生例項化物件,這樣的話執行緒就變得不安全了,
這樣得話在產生例項化物件的時候就要判斷物件的引用是否為空,如果我們使用多個執行緒同時判斷
的話那豈不是很美好,然而這樣還是單例模式嗎?那如何解決這個問題呢?
public class satiation
public static synchronized satiation getinstance()
}
為了保護執行緒安全,使用synchronized關鍵字標識了方法。但是在這種模式中效率就會有所犧牲,因為
需要保證同步。
人類的智慧型是無限的,犧牲效率?於是乎為了提高飽漢模式的效率,那麼就創造除了雙重鎖模式,這種模式
是對飽汗模式的一種優化,進行雙重判斷,當已經建立過例項化物件後就無需加鎖,提高效率。
public class satiation_g
}public static satiation_g getinstance()
} return _satiation; }
}
最後乙個就是懶載入模式了,此模式使用lock(synobjiect)用於保證**執行到該處時阻止另乙個程序訪問後面的**,
直到當前程序執行完成,主要是阻止多個程序同時訪問_lazy。
public class lazy
public static lazy getinstance()}}
return _lazy;
}}
C 設計模式 單例例項
一.建立乙個自己型別的私有靜態變數 二.將建構函式私有化 三.建立乙個獲取例項的public靜態函式 using system using system.collections.generic using system.linq using system.text using system.thre...
C 例項 單例模式
昨天晚上,我的老師 算是我的親戚 給了我一段 讓我看看。現copy如下 1 citysingleton.cs檔案 using system using system.data using system.configuration using system.web using system.web.s...
C 單例模式例項
定義 在某些情況下,我們設計中的物件只需要乙個,比方說 執行緒池 threadpool 快取 cache 對話方塊 處理偏好設定和登錄檔物件 日誌物件 充當印表機 顯示卡等裝置的驅動程式的物件等。事實上,這類物件只能有乙個例項,如果製造出多個例項,就會導致許多問題產生。這裡要說的單件模式就能確保乙個...