首頁>技術>

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

場景

如果我們在程式碼中需要一個全域性類,我們可以讓它變成一個單例。例如,我們在系統的多個地方需要讀取一個配置檔案,我們並不需要每次都去new一個例項,然後去讀檔案,只需要維護一個全域性的Config類,並且每次使用的時候校驗下檔案是否變更即可。依賴可以減少類的建立跟銷燬的時候的開銷,二來也減少了讀取檔案的次數。又如我們需要維護一個計數器,我們當然不想每次統計的時候都穿透去寫DB,我們可以先寫到記憶體當中。還有,在程式開發中,我們常常運用到各種池化技術,我們可以將執行緒池,連線池作為一個單例,統一進行分配跟管理。

實現

在Java中,我們通常是這麼實現單例的,原本我們的類的構造方法是公有的,所以我們無論在哪都能例項化這個類,所以我們必須把共有方法改成私有方法,然後通過一個共有函式來獲取這個例項。

我們獲取的時候,判斷它是否為空,如果為空,那麼就初始化一個新的,否則直接返回。相信聰明的朋友已經看到了這裡面存在一個小問題,那就是存在併發,一般我們可以使用雙if與synchronized關鍵字,讓初始化的程式碼最多隻會執行一次。

優點

因為是全域性唯一的,所以減少了類的建立與銷燬時候的開銷。對於一些資源的例項,可以更加容易進行管理與維護,特別是對於一些配置類,多例項總會出現一些意想不到的錯誤。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 神一般的C語言指標,你看懂了多少?