單例模式優缺點

優勢

(1) 因爲單例模式在內存中只有一個實例,減小內存開支,特別是一個對象須要頻繁地建立銷燬時,並且建立或銷燬時性能又沒法優化,單例模式就很是明顯了html

(2) 因爲單例模式只生成一個實例,因此,減小系統的性能開銷,當一個對象產生須要比較多的資源時,如讀取配置,產生其餘依賴對象時,則能夠經過在應用啓動時直接產生一個單例對象,而後永久駐留內存的方式來解決。數據庫

(3) 單例模式能夠避免對資源的多重佔用,例如一個寫文件操做,因爲只有一個實例存在內存中,避免對同一個資源文件的同時寫操做安全

(4) 單例模式能夠在系統設置全局的訪問點,優化和共享資源訪問,例如,能夠設計一個單例類,負責全部數據表的映射處理。性能

缺點

(1) 單例模式沒有抽象層,擴展很困難,若要擴展,除了修改代碼基本上沒有第二種途徑能夠實現。優化

(2) 單例類的職責太重,在必定程度上違背了「單一職責原則」。spa

(3) 濫用單例將帶來一些負面問題,如:爲了節省資源將數據庫鏈接池對象設計爲的單例類,可能會致使共享鏈接池對象的程序過多而出現鏈接池溢出;線程

又好比:在多個線程中操做單例類的成員時,但單例中並無對該成員進行線程互斥處理。設計

 

 

https://www.cnblogs.com/restartyang/articles/7770856.htmlrest

優勢: 
    1.在單例模式中,活動的單例只有一個實例,對單例類的全部實例化獲得的都是相同的一個實例。這樣就 防止其它對象對本身的實例化,確保全部的對象都訪問一個實例 
    2.單例模式具備必定的伸縮性,類本身來控制實例化進程,類就在改變實例化進程上有相應的伸縮性。 
    3.提供了對惟一實例的受控訪問。 
    4.因爲在系統內存中只存在一個對象,所以能夠 節約系統資源,當 須要頻繁建立和銷燬的對象時單例模式無疑能夠提升系統的性能。 
    5.容許可變數目的實例。 
    6.避免對共享資源的多重佔用。 
缺點: 
    1.不適用於變化的對象,若是同一類型的對象老是要在不一樣的用例場景發生變化,單例就會引發數據的錯誤,不能保存彼此的狀態。 
    2.因爲單利模式中沒有抽象層,所以單例類的擴展有很大的困難。 
    3.單例類的職責太重,在必定程度上違背了「單一職責原則」。 
    4.濫用單例將帶來一些負面問題,如爲了節省資源將數據庫鏈接池對象設計爲的單例類,可能會致使共享鏈接池對象的程序過多而出現鏈接池溢出;若是實例化的對象長時間不被利用,系統會認爲是垃圾而被回收,這將致使對象狀態的丟失。 htm

使用注意事項:     1.使用時不能用反射模式建立單例,不然會實例化一個新的對象     2.使用懶單例模式時注意線程安全問題     3.餓單例模式和懶單例模式構造方法都是私有的,於是是不能被繼承的,有些單例模式能夠被繼承(如登記式模式) 

相關文章
相關標籤/搜索