單例模式的概要就是確保乙個類只有乙個例項,並提供乙個全域性訪問點。
懶漢式單例:
對於例項做懶載入處理,即在客戶第一次使用時再做建立,所以第一次獲取例項的效率會稍微低一些。
/**
* 將自身例項化物件設定為乙個屬性,並用static修飾
*/private
static lazysingleton instance;
/** * 靜態方法返回該例項
* @return
*/public
static lazysingleton getinstance()
catch
(interruptedexception e)
instance =
newlazysingleton()
;}return instance;
}
懶漢模式的優缺點:
優點:延遲載入
缺點:不加同步的懶漢式是執行緒不安全的,加了synchronized之後就變成執行緒安全的了。
餓漢式單例:
public
class
hungrysingleton
private
hungrysingleton()
public
static hungrysingleton getinstance()
public
static
void
main
(string[
] args)
}類載入時建立:單例模式.hungrysingleton@4554617c
hungrysingleton
----
----
----
----
--單例模式.hungrysingleton@4554617c
單例模式.hungrysingleton@4554617c
這種獲取單例的方式是執行緒安全的,jvm保障在多執行緒情況下一定先建立此例項並且只做一次例項化處理,但是這種情況沒有做到懶載入,比如只是引用此類中的乙個靜態成員變數(常量),此例項在類載入時也一起被初始化了,如果後續應用中不使用這個物件,則會造成資源浪費,占用記憶體。
雙檢鎖機制:
成員變數singleton最好使用volatile修飾,否則若在無參構造中初始化乙個其他的成員變數,會產生指令重排序,導致新建立的物件獲取不到最新的成員變數值。
public
class
doublecheckedlockingsingleton
/** * 靜態方法返回例項
*/public
static doublecheckedlockingsingleton getinstance()
}}return singleton;
}}
最佳實現方式。記憶體佔用率高,效率高,執行緒安全,多執行緒操作原子性。
靜態內部類單例模式
/**
* 以靜態內部類的方式來建立獲取單例物件
* */
public
class
innersingleton
public
static innersingleton getinstance()
//靜態內部類內部載入的時候建立外部類,只載入一次,所以只建立乙個
static
class
innerclass
}
這種方式和懶漢式有些相似,它們都採用了類裝載的機制來保證初始化例項時只有乙個執行緒。 而這種模式是將例項的初始化放到了靜態類中去實現,從而實現了懶載入。 單例設計模式(餓漢單例設計模式 懶漢單例設計模式)
1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...
設計模式 單例設計模式
歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...
設計模式 單例設計模式
單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...