23種設計模式之一(單例模式)

2022-07-11 00:03:16 字數 2886 閱讀 8981

乙個類永遠只有乙個物件存在。

方式1(餓漢式 - 執行緒安全)

package

mirale.luna.design.patterns.singleton;

/*** created by miracle luna on 2020/12/15

* * 餓漢式:執行緒安全

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

* 簡單易用,推薦使用!

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

public

class

singleton01

public

static

singleton01 getinstance()

/*** 通過檢視 hashcode值 是否一致,判斷是否執行緒安全

* @param

args

*/public

static

void

main(string args)

}}

方式2(懶漢式 - 執行緒不安全)

package

mirale.luna.design.patterns.singleton;

/*** created by miracle luna on 2020/12/15

* * 懶漢式:執行緒不安全 */

public

class

singleton02

public

static

singleton02 getinstance()

/*** 通過檢視 hashcode值 是否一致,判斷是否執行緒安全

* @param

args

*/public

static

void

main(string args)

}}

方式3(懶漢式 - 執行緒安全 - 加鎖 - 效率下降)

package

mirale.luna.design.patterns.singleton;

/*** created by miracle luna on 2020/12/15

* * 懶漢式:執行緒安全(加鎖實現,但是效率下降) */

public

class

singleton03

public

static

synchronized

singleton03 getinstance()

return

instance;

}/*** 通過檢視 hashcode值 是否一致,判斷是否執行緒安全

* @param

args

*/public

static

void

main(string args)

}}

方式4(懶漢式 - 執行緒安全 - dcl - 效率提公升 - 較完美的實現方式)

package

mirale.luna.design.patterns.singleton;

/*** created by miracle luna on 2020/12/15

* * 懶漢式:執行緒安全

* dcl: double check loading

* 較為完美的單例寫法 */

public

class

singleton04

public

static

singleton04 getinstance() }}

return

instance;

}/*** 通過檢視 hashcode值 是否一致,判斷是否執行緒安全

* @param

args

*/public

static

void

main(string args)

}}

方式5(內部類實現 - 執行緒安全 - 懶載入 - 較完美的實現方式)

package

mirale.luna.design.patterns.singleton;

/*** created by miracle luna on 2020/12/15

* * 靜態內部類

* jvm 保證單例,且執行緒安全,不用加鎖

* 載入外部類時不會載入內部類,變相實現了懶載入(lazy loading)

* 較為完美的單例寫法 */

public

class

singleton05

private

static

class

singleton05holder

public

static

singleton05 getinstance()

/*** 通過檢視 hashcode值 是否一致,判斷是否執行緒安全

* @param

args

*/public

static

void

main(string args)

}}

方式6(列舉類實現 - 執行緒安全 - 防止反序列化 - 最完美的實現方式)

package

mirale.luna.design.patterns.singleton;

/*** created by miracle luna on 2020/12/15

* * 列舉單例

* 不僅實現了執行緒同步,而且防止了反序列化

* 最完美的單例寫法 */

public

enum

singleton06

}}

23種設計模式(一)單例模式

概念 優點 缺點 實現單例模式最關鍵的步驟就是構造器私有 單例模式是最常見的一種設計模式 它有以下特點 1 單例類只能有乙個例項 2 單例類必須自己建立自己的唯一例項 3 單例類必須給所有其他對線提供這一例項 餓漢式單例模式 餓漢式的特點就在於 在類建立的同時就建立好了乙個靜態的物件供系統使用 以後...

23種設計模式 單例模式

某些情況,如 執行緒池,乙個專案中匯流排程數量以及生命週期,可能需要統一控制 如果執行緒池自身可建立多個例項,那麼就無法統一控制,此時,只要能控制線程池物件的數量為乙個,那麼就可以實現統一控制的目標 注意 現實中真正使用純的單例模式並不多 如 spring bean 通過配置來決定是否使用單例 執行...

單例模式(23種設計模式)

單例模式 餓漢模式 class singletondemo public static singletondemo gets 懶漢模式 class singletondemo1 public static singletondemo1 gets return instance 單例模式,懶漢式,執行...