單例 Singleton 模式的餓漢懶漢式實現

2021-10-24 08:18:18 字數 1923 閱讀 7759

設計模式是在大量的實踐中總結和理論化之後優選的**結構、程式設計風格、以及解決問題的思考方式。我們聽說比較多的就是單例模式,工廠模式,**模式。

單例模式,或者叫單例設計模式,就是採用一定的方法保證在整個的軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法。

所以這就要求我們把類的構造方法的訪問許可權設定成private,這樣在類的外部就不能使用new產生類的物件了。這個唯一的物件,我們只在類的內部產生。類的外部如果想得到這個物件可以呼叫該類的靜態方法返回。又因為靜態方法只能訪問靜態成員變數,所以這個物件還得宣告成靜態的。

比較熟悉的有幾種實現方式,如餓漢式、懶漢式。

餓漢:還沒用就造好了。

class

singleton

private

static singleton instance =

newsingleton()

;public

static singleton getinstance()

}public

class

main

}

懶漢:什麼時候用什麼時候造。

class

singleton

private

static singleton instance = null;

public

static singleton getinstance()

return instance;}}

public

class

main

}

專案

好處壞處

餓漢式執行緒安全的

物件載入時間過長

懶漢式延遲物件的建立

執行緒不安全

除了main主線程外,我們再建立乙個執行緒,為了讓效果更明顯,我們在singleton建立物件前sleep(1000)。

class

singleton

private

static singleton instance = null;

public

static singleton getinstance()

catch

(interruptedexception e)

instance =

newsingleton()

;}return instance;}}

public

class

main})

.start()

; singleton instance2 = singleton.

getinstance()

; system.out.

println

(instance2)

;//singleton@4554617c

}}

使用同步**塊即可。

class

singleton

private

static singleton instance = null;

public

static singleton getinstance()

}}return instance;}}

public

class

main})

.start()

; singleton instance2 = singleton.

getinstance()

; system.out.

println

(instance2)

;//singleton@4554617c

}}

面試的時候要麼寫餓漢式,要麼寫執行緒安全的懶漢式。

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...