設計模式第1式 單例模式

2021-10-07 09:11:25 字數 2481 閱讀 6993

所謂單例模式,就是採用一定方式,保證在整個系統中,對於某個類只有乙個物件存在,且該類只提供乙個獲取物件例項的方法。

比如hibernate的sessionfactory,他充當資料儲存源的**,並負責建立session物件。sessionfactory並不是輕量級的,一般情況下,乙個專案通常只需要乙個sessionfactory就夠了,這就會使用到單例模式

下面是8種寫法,及每種的優缺點。其中集中餓漢式和懶漢式的優缺點,得到雙重檢測方式。

見如下**

見如下**

見如下**

見如下**

見如下**

package singleton;

public

class

singletontest

}/**

* 餓漢式1

* 優點:寫法簡單,類載入時即例項化,避免執行緒同步問題

* 缺點:類載入即完成例項化,沒有達到懶載入(lazy loading)的效果。如果自始至終從未用到這個例項,則會造成記憶體浪費。

* * 這種單例模式可用,但是可能造成記憶體浪費。

*/class

singleton1

private

static singleton1 instance =

newsingleton1()

;public

static singleton1 getinstance()

}/**

* 餓漢式2 (靜態**塊)

* * 優缺點同上。

*/class

singleton2

private

static singleton2 instance;

static

public

static singleton2 getinstance()

}/**

* 懶漢式1 (執行緒不安全)

* 優點:起到懶載入的效果,但是只在單執行緒下使用

* 缺點:多執行緒時,2個執行緒同時進入if判斷語句,會產生多個例項。

* * 實際開發中,不要使用這種方式。

*/class

singleton3

public

static singleton3 getinstance()

return instance;}}

/** * 懶漢式2 (執行緒安全,同步方法)

* 優點:起到懶載入的效果,也解決了執行緒同步問題

* 缺點:效率低,每個執行緒在獲取類的例項時,執行getinstance()方法都要進行同步,

* 而這個方法其實只需要執行一次例項化就夠了,後面想獲得該類例項,直接return就行了。

* * 方法進行同步效率太低,實際開發中,不要使用這種方式。

*/class

singleton4

public

static

synchronized singleton4 getinstance()

return instance;}}

/** * 懶漢式3 (執行緒不安全,同步**塊)

* * 為了解決懶漢2效率低的問題,將同步操作放在new物件的地方,但是這樣一來並不能保證執行緒安全了。

* * 不推薦使用。

*/class

singleton5

public

static

synchronized singleton5 getinstance()

}return instance;}}

/** * 雙重檢查 (執行緒安全,懶載入,效率高)

* * 將私有instanc加volatile關鍵字修飾,外加雙重檢查null判斷,可保證執行緒安全,懶載入,保證效率高。

* * 推薦使用。

*/class

singleton6

public

static singleton6 getinstance()

}}return instance;}}

/** * 靜態內部類 (執行緒安全,懶載入)

* * 利用靜態內部類的特點,實現懶載入及執行緒安全

* * 推薦使用。

*/class

singleton7

// 靜態內部類不會隨著外部類的載入而載入,所以能夠實現懶載入

private

static

class

singletoninstance

// 呼叫此方法才會載入內部類,jvm載入類是執行緒安全的。

public

static singleton7 getinstance()

}/**

* 靜態內部類 (執行緒安全,懶載入)

* * 利用靜態內部類的特點,實現懶載入及執行緒安全

* * 推薦使用。

*/enum singleton8

/** * jdk中的runtime類就是使用餓漢式單例模式

*/class

jdk}

設計模式1 單例模式

文章引用出處 singleton模式是最簡單最常用的設計模式。1,定義 確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個該類。2,單例模式優點 1 單例模式在記憶體中只有乙個例項,減少了記憶體的開支。2 單例模式只生成乙個例項模式,減少了系統效能的開銷。如當乙個物件的產生需要比較多的系統資...

設計模式1 單例模式

單例模式,利用工廠類只生產乙個例項或者有限個例項,比如乙個系統中只有乙個主機板,乙個顯示卡,但是有些系統中也可以存在多個,雙顯示卡,雙顯示器等等。這些在singleton module中都是可以定義的。當然我們也可以使用全域性的變數或者靜態類或者物件去做,但是單例模式的存在是有其優點的。public...

設計模式1 單例模式

保證乙個類只有乙個例項 即乙個物件,並且提供乙個訪問該例項的全域性訪問點 即類中有乙個公共的方法 方法的返回該類的物件。1.windows的任務管理器 無論開啟多少次都只能開啟乙個視窗 2.windows的 站 3.專案中的配置檔案 4.的計數器 5.日誌 6.連線池 8.spring的bean 預...