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