確保某乙個類只有乙個例項,並且自行例項化並向整個系統提供這個例項
減少記憶體開支。特別是乙個物件需要頻繁的建立、銷毀時,並且建立或銷毀時效能有無法優化。
減少了系統的效能開銷。當乙個物件的產生需要較多的資源時,如讀取配置,產生其他依賴物件等。
避免對資源的多重占用,例如寫檔案動作,如果只有乙個例項在記憶體中,可以避免對同乙個資源檔案的同時寫操作
可以在系統設定全域性的訪問點,優化和共享資源訪問
單例模式一般沒有介面,擴充套件困難
測試困難,在並行開發環境中,如果單例模式沒有完成,是不能進行測試的
單例模式與單一職責原則有衝突。
要求生成唯一序列號的環境
在整個專案中需要乙個共享訪問點或共享資料
建立乙個物件需要消耗的資源過多
需要定義大量的靜態常量和靜態方法的環境,如工具類
在高併發的情況下,要注意單例模式的執行緒同步問題
考慮物件的復用
壞單例模式
1. 餓漢模式
餓漢模式其實就是一種預載入機制,在使用前就完成物件的例項化
缺點在類載入時就完成了例項化,如果一直沒有用到這個例項,就會造成記憶體浪費
2. 懶漢模式(不同步)
懶漢模式其實就是懶載入的意思,在使用時再進行例項化,不用則不建立物件
3.同步方法
通過同步方法加鎖,使其執行緒安全
4.同步**塊
將同步方法換成同步**塊,以增加呼叫getinstance方法的效率
5.雙檢鎖
通過兩次判空的方式優化第四個方法
6.帶volatile關鍵字的雙檢鎖
通過雙檢索的方式優化第四個方法
7.靜態內部類
通過靜態內部類的方式實現懶載入,與執行緒安全
8.列舉
設計模式 02 單例模式
1 餓漢模式 宣告靜態物件時,已經初始化。public class singleton public static singleton getinstance 2 懶漢模式 第一次呼叫getinstance時進行初始化。缺點 每次呼叫getinstance都進行同步,造成不必要的同步開銷。publi...
設計模式 02 單例模式
參考 需要某個類只保留乙個物件,如資料庫連線 網路連線 執行緒池等。只能有乙個例項 單例類必須建立自己的唯一例項 單列類向其他物件提供這一例項 單例可以繼承與被繼承,方法可以重寫。靜態類不行 單例產生的物件常駐記憶體。靜態類物件執行後會被釋放,被gc清理 單例模式可以延遲載入,靜態類在第一次執行時被...
設計模式 02 單例模式
餓漢式 靜態 塊 懶漢式 執行緒不安全 懶漢式 執行緒安全,同步方法 懶漢式 執行緒不安全,同步 塊 雙重檢查 推薦 靜態內部類 推薦 列舉注意事項和細節說明 所謂的單例設計模式,就是採取一定的方法,保證在整個的軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法 靜態方...