2020/02/29
單例模式(singleton):用來建立獨一無二的,只能有乙個例項的物件的入場券。
單例模式是所有模式的例圖中最簡單的!
使用單例模式的場景
執行緒池(threadpol)、快取(cache)、對話方塊、處理偏好設定和登錄檔(registry)物件、日誌物件、充當印表機、顯示卡等裝置的驅動程式的物件。
如果製造出多個例項,就會導致許多問題的產生,如
程式的行為異常、資源使用過量,或者是不一致的結果。
單例模式的優點
單例模式是經得起時間考驗的方法,可以確保只有乙個例項會被建立;
單例模式也給了我們乙個全域性的訪問點,和全域性變數一樣方便,又沒有全域性變數的缺點。
全域性變數的缺點
如果將物件賦值給乙個全域性變數,那麼你必須在程式一開始就建立好物件★。萬一這個物件非常耗費資源,而程式在這次的執行過程中又一直沒有用到它,就形成了浪費。
**模式可以在需要時才建立物件。
★這其實和實現有關。有些jvm的實現是在用到的時候才建立物件。
剖析經典的單例模式實現:
publicclass
singleton //
把構造器宣告為私有的,只有在singleton類內才可以呼叫構造器。
public
static singleton getinstance()
return
uniqueinstance;
}//這裡是其他方法。
//當然singleton是乙個正常的類,具有一些其他用途的例項變數和方法。
}
singleton
static uniqueinstance
// 其他有用的單例資料......
static getinstanec()
//其他有用的單例方法......
這個類變數持有唯一的單例例項。
getinstance()方法是靜態的,這意味著它是乙個類方法,所以可以在**的任何地方使用singleton.getinstance()訪問它。
這和訪問全域性變數一樣簡單,只是多了乙個優點,單例可以延遲例項化。
但上面的**可能會在多執行緒的情況下產生多個例項!
處理多執行緒
只要把 getinstance() 變成同步(synchronized)方法,多執行緒災難幾乎就可以輕易的解決了:
1public
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方法負責檢驗並例...