單例模式優缺點


優點

(1) 由於單例模式在內存中只有一個實例,減少內存開支,特別是一個對象需要頻繁地創建銷毀時,而且創建或銷毀時性能又無法優化,單例模式就非常明顯了

(2) 由於單例模式只生成一個實例,所以,減少系統的性能開銷,當一個對象產生需要比較多的資源時,如讀取配置,產生其他依賴對象時,則可以通過在應用啟動時直接產生一個單例對象,然后永久駐留內存的方式來解決。

(3) 單例模式可以避免對資源的多重占用,例如一個寫文件操作,由於只有一個實例存在內存中,避免對同一個資源文件的同時寫操作

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

缺點

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

(2) 單例類的職責過重,在一定程度上違背了“單一職責原則”。

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

又比如:在多個線程中操作單例類的成員時,但單例中並沒有對該成員進行線程互斥處理。

 

 

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

優點: 
    1.在單例模式中,活動的單例只有一個實例,對單例類的所有實例化得到的都是相同的一個實例。這樣就 防止其它對象對自己的實例化,確保所有的對象都訪問一個實例 
    2.單例模式具有一定的伸縮性,類自己來控制實例化進程,類就在改變實例化進程上有相應的伸縮性。 
    3.提供了對唯一實例的受控訪問。 
    4.由於在系統內存中只存在一個對象,因此可以 節約系統資源,當 需要頻繁創建和銷毀的對象時單例模式無疑可以提高系統的性能。 
    5.允許可變數目的實例。 
    6.避免對共享資源的多重占用。 
缺點: 
    1.不適用於變化的對象,如果同一類型的對象總是要在不同的用例場景發生變化,單例就會引起數據的錯誤,不能保存彼此的狀態。 
    2.由於單利模式中沒有抽象層,因此單例類的擴展有很大的困難。 
    3.單例類的職責過重,在一定程度上違背了“單一職責原則”。 
    4.濫用單例將帶來一些負面問題,如為了節省資源將數據庫連接池對象設計為的單例類,可能會導致共享連接池對象的程序過多而出現連接池溢出;如果實例化的對象長時間不被利用,系統會認為是垃圾而被回收,這將導致對象狀態的丟失。 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM