天天看點

單例模式 - 設計模式

作用

用于保證整個應用中的某個執行個體有且隻有一個。

建立多個執行個體會造成占用過多資源,不一緻結果。

應用場景

有些對象我們隻需要一個,如:配置檔案、工具類、線程池、緩存、日志對象等。

實作

【目的】整個應用隻需要一個Singleton類的執行個體。

【實作關鍵】将構造方法私有化,不允許外部直接建立對象。

>餓漢模式——在類加載時便建立singleton執行個體

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

public

class

Singleton {

//1、将構造方法私有化,防止通過new執行個體化多個本類的執行個體

private

Singleton(){};

//3、建立類的唯一執行個體,用private修飾防止被"篡改"

private

static

Singleton instance = 

new

Singleton();

//2、由于不允許直接建立對象,故需要提供public static的擷取執行個體的方法

public

static

Singleton getInstance(){

return

instance;

}

}

>懶漢模式——在運作時才建立singleton執行個體

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

public

class

Singleton {

//1、将構造方法私有化,防止通過new執行個體化多個本類的執行個體

private

Singleton(){};

//3、建立類的唯一執行個體,用private修飾防止被"篡改"

private

static

Singleton instance = 

null

;

//2、由于不允許直接建立對象,故需要提供public static的擷取執行個體的方法

//△懶漢模式是非線程安全的,故擷取單例的方法需要用synchronized修飾

public

static

synchronized

Singleton getInstance(){

if

(instance == 

null

)

instance = 

new

Singleton();

return

instance;

}

}

【餓漢模式 vs. 懶漢模式】

餓漢模式:加載類時比較慢,但運作時擷取對象的速度比較快;線程安全;

懶漢模式:加載類時比較快,但運作時擷取對象的速度比較慢;非線程安全;

繼續閱讀