定義:確保某一個類只有一個實例,並且自行實例化並向整個系統提供這個實例java
Singleton類稱爲單例類,經過使用private的構造函數確保了在一個應用中只產生一個實例,而且是自行實例化的數據庫
因爲單例模式在內存中只有一個實例,減小了內存開支,特別是一個對象頻繁的建立、銷燬時,而且建立或銷燬時性能沒法優化,單例模式的優點就很是明顯了安全
單例模式通常沒有接口,擴展很困難。另外單例模式與單一職責原則有衝突,一個類應該只實現一個邏輯,而不關心它是不是單例的併發
1.要求生成惟一序列號的環境函數
2.在項目中須要一個共享訪問點或共享數據時,如一個Web頁面上的計數器,能夠不用把每次刷新都記錄到數據庫中,使用單例模式保持計數器的值,並確保是線程安全的高併發
3.建立一個對象須要消耗過多資源,如要訪問IO和數據庫等資源性能
4.須要定義大量的靜態常量和靜態方法的環境,能夠採用單例模式優化
1.注意單例模式的線程安全的問題,尤爲是在高併發的狀況下線程
2.要考慮對象的複製狀況。在java中對象默認是不能夠被複制的,若實現了Cloneable接口,並實現了clone方法,則是能夠經過對象複製方式建立一個新對象,對象複製是不須要調用類的構造函數,所以即便是私有的構造函數,對象仍然能夠被複制對象
在Spring中,每一個Bean默認都是單例的,這樣的優勢是Spring容器能夠管理Bean的生命週期,決定何時建立,何時銷燬,銷燬的時候須要作什麼處理等等