23種設計模式之單例模式(8種寫法)

2021-10-13 14:15:03 字數 2847 閱讀 1886

``23種設計模式之單例模式(8種寫法)

/**

* 餓漢式

* * 高效 沒有執行緒安全問題 簡單

* * jvm保證執行緒安全問題

*/public

class

merge01

public

static merge01 getinstance()

public

static

void

main

(string[

] args)

}/**

* 用靜態塊初始化

*/public

class

merge02

private

merge02()

;public

static merge02 getinstance()

;public

static

void

main

(string[

] args)

}/**

* 懶漢式

* 懶載入模式 lazy-loading

* 做到了按需初始化,但是多執行緒訪問時有執行緒安全問題

*/public

class

merge03

;public

static merge03 getinstance()

catch

(exception e)

instance =

newmerge03()

;}return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

/** * 懶載入模式 lazy-loading 加鎖避免了執行緒安全問題,但是效率受影響

*/public

class

merge04

;public

static

synchronized merge04 getinstance()

catch

(exception e)

instance =

newmerge04()

;}return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

/** * 懶載入模式 lazy-loading

* instance == null 和sychnorized方法沒有同步,執行緒安全問題存在、

*/public

class

merge05

;public

static merge05 getinstance()

catch

(exception e)

instance =

newmerge05()

;}}return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

/** * 懶載入模式 lazy-loading

* 雙重檢查,接近完美

*/public

class

merge06

;public

static merge06 getinstance()

catch

(exception e)

instance =

newmerge06()

;}}}

return instance;

}public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

/** * 懶載入模式 lazy-loading

* * 靜態內部類方式,jvm保證執行緒安全問題,

* * merge07holder在呼叫getinstance()時才被例項一次,所以instance例項也只被例項一次,幾乎完美的方式

*/public

class

merge07

;private

static

class

merge07holder

public

static merge07 getinstance()

public

voidm(

)public

static

void

main

(string[

] args)).

start()

;}}}

/** * 列舉類寫法

* 解決執行緒安全問題,同時方式反序列化

*/public

enum merge08

public

static

void

main

(string[

] args)).

start()

;}}}

23種設計模式之單例模式

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

23種設計模式之 單例模式

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

23種設計模式之單例模式

單例模式 確保乙個類最多只有乙個例項,並提供乙個全域性訪問點 普通單例模式示例 有問題 public class singleton public static singleton getinstance return uniqueinstance 示例singleton public class ...