簡介:
單例模式(singleton)是一種常用的軟體設計模式,在它的核心結構中只包含乙個被稱為單例的特殊類。
定義:
確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。
單例模式
單例模式根據例項化物件時機不同分為兩種模式。
餓漢式:餓漢式單例在單例類被載入的時候,就例項化乙個物件交給自己引用
懶漢式:懶漢式單例在呼叫取得例項方法的時候才會被例項化物件。
**如下:
packagecom.lvsling.test;
/***
單例模式
*@authoradministrator**/
publicclasstestsingleton }//
餓漢式classclassa
privateclassa()}//
懶漢式classclassb
privateclassb()}//
靜態內部類:既實現了執行緒安全,又避免了同步帶來的效能影響。
classclassc
publicstaticclassc newinstance()
privateclassc()
}餓漢式和懶漢式的區別
從餓漢,懶漢來看:
餓漢式的類一旦載入,就把單例初始化完成,餓漢式建立單例是寫在static修飾的靜態屬性後。
懶漢式static修飾的靜態屬性建立乙個null的空間,當呼叫newinstance的時候,才回去初始化單例
從執行緒安全的角度:
餓漢式天生就是執行緒安全的
懶漢式本身並非執行緒安全,實現執行緒安全而採用synchronized鎖標記,或者靜態內部內的方法
從效能方面:
餓漢式在類建立的同時就例項化乙個靜態物件出來,不管之後會不會使用這個單例,都會占用一些記憶體,但是,如果在第一次呼叫使用時速度會很快因為它在類載入的時候已經建立好了,單例已經存在了
懶漢式因為呼叫newinstance才會去例項化物件,所以第一次呼叫時效能會延遲,但是懶漢式不會浪費記憶體,用到時才會建立單例物件。
單例模式的優點:
防止其它物件對自己的例項化,確保所有的物件都訪問乙個例項
。提供了對唯一例項的受控訪問。
由於在系統記憶體中只存在乙個物件,因此可以
節約系統資源,當
需要頻繁建立和銷毀的物件時單例模式無疑可以提高系統的效能。
避免對共享資源的多重占用。
單例模式的適用場景:
需要頻繁例項化然後銷毀的物件。
.建立物件時耗時過多或者耗資源過多,但又經常用到的物件。
有狀態的工具類物件。
頻繁訪問資料庫或檔案的物件。
總結:
我認為,在使用單例模式時,如果不考慮資源的使用,可以採用餓漢式,在使用的時候更快更迅速。
如果考慮資源的浪費,可以採用靜態內部內的方式去實現。
單例模式其核心思想就是將構造方法私有化,通過靜態方法獲取乙個唯一的例項
在獲取的過程中,既要保證執行緒安全,又要防止反序列化導致重新生成例項物件。
設計模式1 單例模式
文章引用出處 singleton模式是最簡單最常用的設計模式。1,定義 確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個該類。2,單例模式優點 1 單例模式在記憶體中只有乙個例項,減少了記憶體的開支。2 單例模式只生成乙個例項模式,減少了系統效能的開銷。如當乙個物件的產生需要比較多的系統資...
設計模式1 單例模式
單例模式,利用工廠類只生產乙個例項或者有限個例項,比如乙個系統中只有乙個主機板,乙個顯示卡,但是有些系統中也可以存在多個,雙顯示卡,雙顯示器等等。這些在singleton module中都是可以定義的。當然我們也可以使用全域性的變數或者靜態類或者物件去做,但是單例模式的存在是有其優點的。public...
設計模式1 單例模式
保證乙個類只有乙個例項 即乙個物件,並且提供乙個訪問該例項的全域性訪問點 即類中有乙個公共的方法 方法的返回該類的物件。1.windows的任務管理器 無論開啟多少次都只能開啟乙個視窗 2.windows的 站 3.專案中的配置檔案 4.的計數器 5.日誌 6.連線池 8.spring的bean 預...