1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        幫助新人分分鐘搞定Java單例模式!

        共 1768字,需瀏覽 4分鐘

         ·

        2021-01-23 09:46



        單例模式

        單例模式(Singleton),也叫單子模式,是一種常用的軟件設(shè)計(jì)模式。在應(yīng)用這個(gè)模式時(shí),單例對(duì)象的類必須保證只有一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要擁有一個(gè)的全局對(duì)象,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為。

        比如在某個(gè)服務(wù)器程序中,該服務(wù)器的配置信息存放在一個(gè)文件中,這些配置數(shù)據(jù)由一個(gè)單例對(duì)象統(tǒng)一讀取,然后服務(wù)進(jìn)程中的其他對(duì)象再通過這個(gè)單例對(duì)象獲取這些配置信息。這種方式簡(jiǎn)化了在復(fù)雜環(huán)境下的配置管理。


        單例模式的運(yùn)用場(chǎng)景


        • 外部資源:每臺(tái)計(jì)算機(jī)有若干個(gè)打印機(jī),但只能有一個(gè)PrinterSpooler,以避免兩個(gè)打印作業(yè)同時(shí)輸出到打印機(jī)。


        • Windows的Task Manager(任務(wù)管理器)就是很典型的單例模式(這個(gè)很熟悉吧),想想看,是不是呢,你能打開兩個(gè)windows task manager嗎?


        • 多線程的線程池的設(shè)計(jì)一般也是采用單例模式,這是由于線程池要方便對(duì)池中的線程進(jìn)行控制。


        實(shí)現(xiàn)單例模式的方法思路


        一個(gè)類能返回對(duì)象一個(gè)引用(永遠(yuǎn)是同一個(gè))和一個(gè)獲得該實(shí)例的方法(必須是靜態(tài)方法,通常使用getInstance這個(gè)名稱);


        當(dāng)我們調(diào)用這個(gè)方法時(shí),如果類持有的引用不為空就返回這個(gè)引用,如果類保持的引用為空就創(chuàng)建該類的實(shí)例并將實(shí)例的引用賦予該類保持的引用。


        同時(shí)我們 還將該類的構(gòu)造函數(shù)定義為私有方法,這樣其他處的代碼就無法通過調(diào)用該類的構(gòu)造函數(shù)來實(shí)例化該類的對(duì)象,只有通過該類提供的靜態(tài)方法來得到該類的唯一實(shí)例。


        實(shí)現(xiàn)單例模式的方式


        01

        懶漢單例式

        • 天生線程不安全:這種方式是最基本的實(shí)現(xiàn)方式,這種實(shí)現(xiàn)最大的問題就是不支持多線程。因?yàn)闆]有加鎖 synchronized,所以嚴(yán)格意義上它并不算單例模式。



        • 天生線程不安全:這種方式具備很好的 lazy loading,能夠在多線程中很好的工作,但是,效率很低,99% 情況下不需要同步。



        02

        餓漢單列式


        這種方式比較常用,但容易產(chǎn)生垃圾對(duì)象。



        03

        靜態(tài)內(nèi)部類的方式


        這種方式能達(dá)到雙檢鎖方式一樣的功效,但實(shí)現(xiàn)更簡(jiǎn)單。對(duì)靜態(tài)域使用延遲初始化,應(yīng)使用這種方式而不是雙檢鎖方式。這種方式只適用于靜態(tài)域的情況,雙檢鎖方式可在實(shí)例域需要延遲初始化時(shí)使用。



        04

        枚舉


        這種實(shí)現(xiàn)方式還沒有被廣泛采用,但這是實(shí)現(xiàn)單例模式的最佳方法。它更簡(jiǎn)潔,自動(dòng)支持序列化機(jī)制,絕對(duì)防止多次實(shí)例化。



        資源加載和性能區(qū)別


        餓漢式在類創(chuàng)建的同時(shí)就實(shí)例化一個(gè)靜態(tài)對(duì)象出來,不管之后會(huì)不會(huì)使用這個(gè)單例,都會(huì)占據(jù)一定的內(nèi)存,但是相應(yīng)的,在第一次調(diào)用時(shí)速度也會(huì)更快,因?yàn)槠滟Y源已經(jīng)初始化完成。


        而懶漢式,會(huì)延遲加載,在第一次使用該單例的時(shí)候才會(huì)實(shí)例化對(duì)象出來,第一次調(diào)用時(shí)要做初始化,如果要做的工作比較多,性能上會(huì)有些延遲,之后就和餓漢式一樣了。


        靜態(tài)內(nèi)部類的方式資源利用率高,但第一次加載時(shí)反應(yīng)不夠快;java中餓單例模式性能優(yōu)于懶單例模式,若對(duì)資源十分在意可以采用靜態(tài)內(nèi)部類。

        如果你還未走入編程的世界,不妨先來了解一下編程的世界,再去選擇學(xué)習(xí)哪一個(gè)吧!


        因此,學(xué)互聯(lián)網(wǎng)技術(shù)不能猶豫,否則你就和高薪擦肩而過了。不論你是0基礎(chǔ)還是轉(zhuǎn)行,都有大牛老師手把手教你學(xué)習(xí)最新熱門技術(shù),找一份自己滿意的高薪工作。


        達(dá)內(nèi)1月免費(fèi)試聽課火熱預(yù)約中,一線名師,高薪技術(shù),入門技巧,面試訣竅,一站式打包學(xué)會(huì) ,讓你學(xué)會(huì)最有前途的技術(shù),順利通過面試,成功獲取高薪!馬上掃碼或者閱讀原文報(bào)名吧!

        ▼免費(fèi)名額火熱搶先中

        --精彩推薦--

        課程咨詢后臺(tái)直接回復(fù):客服,真人在線答疑方便又快捷。達(dá)妹微信:tedu521,了解課程介紹,獲取學(xué)習(xí)資源。

        文章來源:速學(xué)Java
        *版權(quán)聲明:轉(zhuǎn)載文章和圖片均來自公開網(wǎng)絡(luò),版權(quán)歸作者本人所有,推送文章除非無法確認(rèn),我們都會(huì)注明作者和來源。如果出處有誤或侵犯到原作者權(quán)益,請(qǐng)與我們聯(lián)系刪除或授權(quán)事宜。?

        點(diǎn)擊下方“閱讀原文”搶免費(fèi)試聽名額吧!頁面如果加載不全,請(qǐng)退出重新進(jìn)入,耐心等3秒哦

        瀏覽 66
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            特操逼| 曰韩无码 | 国产一级毛片电影 | 国产中文字幕视频在线 | 精品黄工厂在线观看 | 国产久视频 | 无码成人午夜电影免费 | 美女扒开尿口让男人捅爽 | 91丝袜放荡丝袜脚交 | 韩国穿丝袜三级bd高清 |