java設(shè)計模式之單例模式解析
單例模式是最簡單但同時也是很重要的一種設(shè)計模式,優(yōu)點有以下幾個方面:
1.當(dāng)內(nèi)存占用特別大的類需要頻繁地創(chuàng)建銷毀時,單例模式可以節(jié)省內(nèi)存和提高性能,例如myBatis里面的sessionFactory
2.當(dāng)需要對文件做單一讀寫時,例如同一時間只能同時寫入一個windows文本文件,則需要用單例來避免多重讀寫
缺點是:
1.單例模式?jīng)]有接口,很難對其進行拓展。
2.不利于測試,沒辦法直接根據(jù)接口mock出一個對象出來測試
最后說下其實現(xiàn)方式主要有餓漢模式和懶漢模式。其中懶漢模式又可以細(xì)分為幾種,后面再說。
餓漢模式代碼:
public Class Singleton{ //在類加載時便實例化自身,餓漢模式 private static Class Singletom instance = new Singleton(); private Singleton(){}; public getInstance(){ return this.instance } }
懶漢模式且線程安全代碼1
public Class Singleton{ private static Class Singletom instance = null; private Singleton(){}; public static Singleton getInstance(){ if(instance==null){ //雙重檢測鎖定懶漢模式,如果是直接在getInsance上加鎖,因為有99%的情況是線程安全的,會增加性能消耗,故才有雙重檢測鎖定,優(yōu)化鎖,讓鎖只在1%的情況才執(zhí)行 synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } return this.instance } }
懶漢模式且線程安全代碼2
public Class Singleton{ //靜態(tài)內(nèi)部類的方式,應(yīng)該是因為classLoader的機制使得內(nèi)部類不會在類 //裝載時便實例化,所以可行 private static Class SingletomLoader(){ private static Singleton instance = new Singleton(); } private Singleton(){}; public static final Singleton getInstance(){ return SingletomLoader.instance } }
總結(jié):spring容器中的bean便使用了單例模式,由spring容器控制其bean的生命周期,而如果設(shè)置成多例模式的話,則是交由J2EE容器負(fù)責(zé)其對象的生命周期。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決Druid動態(tài)數(shù)據(jù)源配置重復(fù)刷錯誤日志的問題
使用druid數(shù)據(jù)庫連接池實現(xiàn)動態(tài)的配置數(shù)據(jù)源功能,在配置過程中出現(xiàn)一個問題既然是用戶自己配置的數(shù)據(jù)源,就無法避免輸入錯誤,連接失敗等情況,關(guān)于這個問題怎么處理呢,今天小編通過本文給大家詳細(xì)說明下,感興趣的朋友一起看看吧2021-05-05springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo
這篇文章主要介紹了springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Spring的@Value注入復(fù)雜類型(通過@value注入自定義類型)
Spring的@Value可以注入復(fù)雜類型嗎?今天教你通過@value注入自定義類型。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12java 實現(xiàn)websocket的兩種方式實例詳解
這篇文章主要介紹了java 實現(xiàn)websocket的兩種方式實例詳解,一種使用tomcat的websocket實現(xiàn),一種使用spring的websocket,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法
本篇文章主要介紹了詳解Spring Cloud負(fù)載均衡重要組件Ribbon中重要類的用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03IDEA創(chuàng)建Java Web項目不能及時刷新HTML或JSP頁面問題
這篇文章主要介紹了IDEA創(chuàng)建Java Web項目不能及時刷新HTML或JSP頁面問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決
這篇文章主要介紹了idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07