概述:單例(singleton)模式要求乙個類有且僅有乙個例項,並且提供了乙個全域性的訪問點。這就提出了乙個問題:如何繞過常規的構造器,提供一種機制來保證乙個類只有乙個例項?客戶程式在呼叫某乙個類時,它是不會考慮這個類是否只能有乙個例項等問題的,所以,這應該是類設計者的責任,而不是類使用者的責任。 從另乙個角度來說,singleton模式其實也是一種職責型模式。因為我們建立了乙個物件,這個物件扮演了獨一無二的角色,在這個單獨的物件例項中,它集中了它所屬類的所有權力,同時它也肩負了行使這種權力的職責!
核心作用:保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點
應該在什麼時候下使用單例模式?
舉乙個小例子,在我們的windows桌面上,我們開啟了乙個**站,當我們試圖再次開啟乙個新的**站時,windows系統並不會為你彈出乙個新的**站視窗。,也就是說在整個系統執行的過程中,系統只維護乙個**站的例項。這就是乙個典型的單例模式運用。
繼續說**站,我們在實際使用中並不存在需要同時開啟兩個**站視窗的必要性。假如我每次建立**站時都需要消耗大量的資源,而每個**站之間資源是共享的,那麼在沒有必要多次重複建立該例項的情況下,建立了多個例項,這樣做就會給系統造成不必要的負擔,造成資源浪費。
再舉乙個例子,**的計數器,一般也是採用單例模式實現,如果你存在多個計數器,每乙個使用者的訪問都重新整理計數器的值,這樣的話你的實計數的值是難以同步的。但是如果採用單例模式實現就不會存在這樣的問題,而且還可以避免執行緒安全問題。同樣多執行緒的執行緒池的設計一般也是採用單例模式,這是由於執行緒池需要方便對池中的執行緒進行控制
從上述的例子中我們可以總結出適合使用單例模式的場景和優缺點:
適用場景: 1.需要生成唯一序列的環境
2.需要頻繁例項化然後銷毀的物件。
3.建立物件時耗時過多或者耗資源過多,但又經常用到的物件。
4.方便資源相互通訊的環境
優點:1.實現了對唯一例項訪問的可控
2.對於一些需要頻繁建立和銷毀的物件來說可以提高系統的效能。
缺點:1. 不適用於變化頻繁的物件
2.濫用單例將帶來一些負面問題,如為了節省資源將資料庫連線池物件設計為的單例類,可能會導致共享連線池物件的程式過多而出現連線池溢位。
Singleton 單例 模式
singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...
Singleton 單例 模式
今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...
單例(Singleton)模式
單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...