單例設計模式

2021-09-29 13:01:20 字數 1837 閱讀 9996

單例模式的概要就是確保乙個類只有乙個例項,並提供乙個全域性訪問點。

懶漢式單例:

對於例項做懶載入處理,即在客戶第一次使用時再做建立,所以第一次獲取例項的效率會稍微低一些。

/**

* 將自身例項化物件設定為乙個屬性,並用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...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...