23種設計模式之單例設計模式 4

2021-10-24 02:32:53 字數 3734 閱讀 7328

餓漢式(1)(–普通情況建議使用–)

package singleton;

/** * 餓漢式

* 類載入到記憶體後,就例項化乙個單例,jvm保證執行緒安全

* 簡單使用,推薦使用

* 唯一缺點:不管用到與否,類裝載時就完成例項化

* */

public

class

mgr01

public

static mgr01 getinstance()

public

voidm(

)public

static

void

main

(string[

] args)

}

餓漢式(2)(–跟01一樣–)
package singleton;

/** * 餓漢式

* 跟01是乙個意思

* */

public

class

mgr02

private

mgr02()

public

static mgr02 getinstance()

public

voidm(

)public

static

void

main

(string[

] args)

}

懶漢式(1)(–執行緒不安全–)
package singleton;

/** * lazy loading

* 也稱懶漢式

* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題

* */

public

class

mgr03

public

static mgr03 getinstance()

catch

(interruptedexception e)

instance =

newmgr03()

;}return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

懶漢式(2) (–可以通過synchronized解決,但也帶來效率下降–)

package singleton;

/** * lazy loading

* 也稱懶漢式

* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題

* 可以通過synchronized解決,但也帶來效率下降

* */

public

class

mgr04

public

static

synchronized mgr04 getinstance()

catch

(interruptedexception e)

instance =

newmgr04()

;}return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

懶漢式(3)(–試圖通過減小同步**塊的方式提高效率,然後不可行 --)

package singleton;

/** * lazy loading

* 也稱懶漢式

* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題

* 可以通過synchronized解決,但也帶來效率下降

* */

public

class

mgr05

public

static mgr05 getinstance()

catch

(interruptedexception e)

instance =

newmgr05()

;}}return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

懶漢式(4)(–雙重檢查 --)

package singleton;

/** * lazy loading

* 也稱懶漢式

* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題

* 可以通過synchronized解決,但也帶來效率下降

* */

public

class

mgr06

public

static mgr06 getinstance()

catch

(interruptedexception e)

instance =

newmgr06()

;}}}

return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

靜態內部類方式 (–推薦載入外部類時不會載入內部類,這樣可以實現懶載入–)

package singleton;

/** * 靜態內部類方式

* jvm保證單例

* 載入外部類時不會載入內部類,這樣可以實現懶載入

* */

public

class

mgr07

private

static

class

mgr07holder

public

static mgr07 getinstance()

public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

列舉類方式 (–最佳方案

package singleton;

/** *不僅可以解決執行緒同步,還可以防止反序列化

*(a列舉內部每個例項都會被jvm加上static final,在jvm層保證只初始化一次)

*/public

enum mgr08

public

static

void

main

(string[

] args)).

start()

;}}}

jit

23種設計模式 之單例設計模式

一 定義 確保某乙個類只有乙個例項,而且自行例項化,並且向整個系統提供這個例項。二 優點 減少了記憶體的開支,減少系統的效能開銷,避免了對於資源的多重占用,優化其資源訪問。三 缺點 擴充套件困難,對於測試不利。四 注意 單例設計模式模式對於使用於系統資源小號過多的操作中,例如io或者連線資料庫。五 ...

23種設計模式之單例模式

我們也經常遇到類似的情況,為了節約系統資源,有時需要確保系統中某個類只有唯一乙個例項,當這個唯一例項建立成功之後,我們無法再建立乙個同型別的其他物件,所有的操作都只能基於這個唯一例項。為了確保物件的唯一性,我們可以通過單例模式來實現,這就是單例模式的動機所在。定義 單例模式 singleton pa...

23種設計模式之 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問 獲取 該例項的方法。單例類應滿足以下特點 單例類 singleton 自己例項化自己的唯一例項,並提供訪問該唯一例項的方法。public class s...