某些情況下,有些物件只需要乙個就可以了,即每個類只需要乙個例項,比如一台計算機可以連線多台印表機,但是這台計算機的列印程式只能有乙個,這裡就可以通過單利模式來避免倆個列印作業同時輸出到印表機中,即在整個列印的過程只有乙個列印程式的例項。
單例模式也叫單件模式,它的作用就是保證在整個應用程式的生命週期中,任何乙個時刻,單例類的例項都只存在乙個或者不存在。
單例模式確保某乙個類只有乙個例項,而且自行例項化,並向整個系統提供這個例項單例模式。單例模式只應在有真正的「單一例項」需求時才可以使用。
全域性變數與單例模式的區別:
首先,全域性變數是對乙個物件的靜態引用,全域性變數確實可以提供單例模式實現全域性訪問這個功能,但是它並不能保證應用程式中只有乙個例項。
其次,編碼規範也明確指出應該少用全域性變數,因為過多使用全域性變數,會造成**難讀。
最後,全域性變數並不能實現繼承,而單例模式(可實現繼承)在類中保留了它的唯一例項,同時還提供了唯一乙個訪問該例項的全域性訪問點。
單例模式用來保證系統中乙個類只有乙個例項,單例類的建構函式必須為私有,同時單例類必須提供乙個全域性訪問點。
public class test
private static test uniqueinstance = new test();
public static test getinstance()
}
使用這種方法實現的單例模式在類被載入時就會例項化這個類的乙個物件,由於在使用之前物件已經建立好,因此可以在多執行緒環境下使用這種方法
如果採用按需例項化(在例項化物件的使用的時候才例項化),則需要考慮多執行緒的同步。
java設計模式之單例模式
單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...
java設計模式 之 單例模式
單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...
Java設計模式之單例模式
說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...