單例模式(Singleton)

2022-03-30 12:04:22 字數 1587 閱讀 7921

2020/02/29

單例模式(singleton):用來建立獨一無二的,只能有乙個例項的物件的入場券。

單例模式是所有模式的例圖中最簡單的!

使用單例模式的場景

執行緒池(threadpol)、快取(cache)、對話方塊、處理偏好設定和登錄檔(registry)物件、日誌物件、充當印表機、顯示卡等裝置的驅動程式的物件。

如果製造出多個例項,就會導致許多問題的產生,如

程式的行為異常、資源使用過量,或者是不一致的結果。

單例模式的優點

單例模式是經得起時間考驗的方法,可以確保只有乙個例項會被建立;

單例模式也給了我們乙個全域性的訪問點,和全域性變數一樣方便,又沒有全域性變數的缺點。

全域性變數的缺點

如果將物件賦值給乙個全域性變數,那麼你必須在程式一開始就建立好物件★。萬一這個物件非常耗費資源,而程式在這次的執行過程中又一直沒有用到它,就形成了浪費。

**模式可以在需要時才建立物件。

★這其實和實現有關。有些jvm的實現是在用到的時候才建立物件。

剖析經典的單例模式實現:

public

class

singleton //

把構造器宣告為私有的,只有在singleton類內才可以呼叫構造器。

public

static singleton getinstance()

return

uniqueinstance;

}//這裡是其他方法。

//當然singleton是乙個正常的類,具有一些其他用途的例項變數和方法。

}

singleton

static uniqueinstance

//  其他有用的單例資料......      

static getinstanec()

//其他有用的單例方法......

這個類變數持有唯一的單例例項。 

getinstance()方法是靜態的,這意味著它是乙個類方法,所以可以在**的任何地方使用singleton.getinstance()訪問它。

這和訪問全域性變數一樣簡單,只是多了乙個優點,單例可以延遲例項化。

但上面的**可能會在多執行緒的情況下產生多個例項!

處理多執行緒

只要把 getinstance() 變成同步(synchronized)方法,多執行緒災難幾乎就可以輕易的解決了:

1

public

class

singeton

6public

static

synchronized

singleton getinstance()

10return

uniqueinstance;11}

12//

其他有用的方法

13 }

Singleton 單例 模式

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

Singleton 單例 模式

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

單例(Singleton)模式

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