設(shè)計模式之單例模式

不知不覺國慶假期已經(jīng)過去了一半,是不是又碌碌無為,渾渾噩噩地度過了幾天,哈哈,我也一樣。今天,我們來講一講一個單例模式。這個應(yīng)該是最簡單的設(shè)計模式了,相信每一個程序員都能學(xué)會。


場景

如果我們在代碼中需要一個全局類,我們可以讓它變成一個單例。例如,我們在系統(tǒng)的多個地方需要讀取一個配置文件,我們并不需要每次都去new一個實例,然后去讀文件,只需要維護一個全局的Config類,并且每次使用的時候校驗下文件是否變更即可。依賴可以減少類的創(chuàng)建跟銷毀的時候的開銷,二來也減少了讀取文件的次數(shù)。又如我們需要維護一個計數(shù)器,我們當(dāng)然不想每次統(tǒng)計的時候都穿透去寫DB,我們可以先寫到內(nèi)存當(dāng)中。還有,在程序開發(fā)中,我們常常運用到各種池化技術(shù),我們可以將線程池,連接池作為一個單例,統(tǒng)一進行分配跟管理。

實現(xiàn)

在Java中,我們通常是這么實現(xiàn)單例的,原本我們的類的構(gòu)造方法是公有的,所以我們無論在哪都能實例化這個類,所以我們必須把共有方法改成私有方法,然后通過一個共有函數(shù)來獲取這個實例。



我們獲取的時候,判斷它是否為空,如果為空,那么就初始化一個新的,否則直接返回。相信聰明的朋友已經(jīng)看到了這里面存在一個小問題,那就是存在并發(fā),一般我們可以使用雙if與synchronized關(guān)鍵字,讓初始化的代碼最多只會執(zhí)行一次。


優(yōu)點

因為是全局唯一的,所以減少了類的創(chuàng)建與銷毀時候的開銷。對于一些資源的實例,可以更加容易進行管理與維護,特別是對于一些配置類,多實例總會出現(xiàn)一些意想不到的錯誤。

總結(jié)

好了,今天我們學(xué)習(xí)了單例模式,是不是很簡單,隨手就能實現(xiàn)一個!歡迎大家關(guān)注我,共同學(xué)習(xí),共同進步。大家的支持是我繼續(xù)嘮嗑的動力。同名公眾號(沙茶敏碎碎念)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、設(shè)計模式 1、設(shè)計模式分類 創(chuàng)建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 ...
    codeobj閱讀 176評論 0 0
  • 概述 單例模式是應(yīng)用最廣的模式之一,在應(yīng)用這個模式時,單例對象的類必須保證只有一個實例存在。許多時候整個系統(tǒng)只需要...
    劉滌生閱讀 1,116評論 0 5
  • 單例模式的定義是:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 單例模式是一種常用的模式,有一些對象我們...
    yufawu閱讀 680評論 0 7
  • 1 單例模式的定義 定義:確保某一個類只有一個實例,自行實例化并且向整個系統(tǒng)提供這個實例。單例模式的通用類圖如下所...
    Jerry_1116閱讀 906評論 0 0
  • 單例模式(Singleton Pattern)是最簡單的一種設(shè)計模式。下面讓我們開始學(xué)習(xí)單例模式。 一、基本介紹 ...
    冰鑒IT閱讀 1,185評論 1 19

友情鏈接更多精彩內(nèi)容