單例模式(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方法負責檢驗並例...