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

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


場景

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

實(shí)現(xiàn)

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



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


優(yōu)點(diǎn)

因?yàn)槭侨治ㄒ坏?,所以減少了類的創(chuàng)建與銷毀時(shí)候的開銷。對于一些資源的實(shí)例,可以更加容易進(jìn)行管理與維護(hù),特別是對于一些配置類,多實(shí)例總會出現(xiàn)一些意想不到的錯(cuò)誤。

總結(jié)

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

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

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

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

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