單例模式singleton

2021-09-10 13:40:56 字數 1743 閱讀 8423

單例模式(singleton):

核心作用:保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點.

常見應用場景:

win的task manager(任務管理器)

win的recycle bin(**站)

專案中,讀取配置檔案的類一般只有乙個物件

**的計數器

應用程式的日誌應用

資料庫連線池的設計

作業系統的檔案系統

spring中,每個bean預設為單例

servlet程式設計中,每個servlet也是單例

springmvc/strust1框架中,控制器物件也是單例

優點:

減少系統效能開銷

可以在系統設定全域性的訪問點,優化共享資源訪問

常見五中單例模式實現方式:

主要:

餓漢式(執行緒安全,呼叫效率高.不能延時載入)

懶漢式(執行緒安全,呼叫效率不高.但能延時載入)

其他:

雙重檢測鎖式

靜態內部類式(執行緒安全,呼叫效率高.可以延時載入)

列舉單例(執行緒安全,呼叫效率高,不能延時載入)

餓漢式:(單例物件立即載入)

public class singletondemo02// 私有化構造器 

public static /*synchronized*/ singletondemo02 getinstance()

}

懶漢式:(單例物件延時載入)

public class singletondemo01() 

public static synchronized singletondemo01 getinstance()

return s;

} }

實現延遲載入

問題:資源利用率高,但是每次getinstance方法都要同步,併發效率低

靜態內部類:懶載入

public class singletondemo04 

public static singletondemo04 getinstance()

private singletondemo04(){}

}

要點:

外部類沒有static屬性,不會立即載入

只有真正呼叫getinstance(),才會載入靜態內部類.載入時是執行緒安全的.

兼顧併發高效和延遲載入

列舉:

public enum singletondemo05 

}

優點:

實現簡單

列舉本身就是單例模式.由jvm從根本上提供保障,避免通過反射和反序列化的漏洞

缺點:

無延遲載入

如何選用:

單例物件 占用 資源少, 不需要 延時載入

列舉 好於 餓漢式

單例物件 占用 資源大,需要 延時載入

靜態內部類 好於 懶漢式

Singleton 單例 模式

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

Singleton 單例 模式

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

單例(Singleton)模式

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