Java懶漢和餓漢單例模式如何實現?

瓶子裡的女人


單例模式是編程開發二十三種設計模式中最基礎的一種設計模式,也是學習設計模式的入門知識。何謂單例模式,顧名思義只允許有一個實例。用編程的行話說,在程序運行的過程中,某一個類只能有一個對象存活在內存中,其它程序不能隨意的new出來一個該類的對象。單例模式正是實現了這個需求,實現思路是該類在自己內部創建一個對象,其它程序無法創建該類的對象。該類創建的對象向整個系統提供,其它程序可以獲取到這個對象並且使用。單例模式的實現一般有兩種方案:懶漢模式和餓漢模式。


懶漢模式

該類向外提供一個可以獲取該類對象的靜態方法,其它程序調用這個方法的時候,系統會判斷內存中是否存在該類的對象,如果存在則返回該類的對象,如果不存在則創建一個新的該類對象。通俗的講,就是一開始並不創建對象,當其它程序需要使用該對象的時候再創建。

懶漢模式的代碼實現如下:

餓漢模式

餓漢模式是在程序啟動或者該類被系統加載的時候,就會創建一個該類的對象,別的程序如果需要使用該類的對象,直接來拿就好了。簡單的來說,餓漢模式是一勞永逸的。餓漢模式的代碼實現如下:

餓漢模式和懶漢模式的區別

  1. 餓漢模式是空間換時間,一開始創建的對象可能其它程序用不到,這樣就會一直佔用著內存。懶漢模式是時間換空間,懶漢模式在需要的時候才去創建,有點“臨陣磨槍”的意思,會造成程序運行時間較長(其實差別是毫秒級的,但是做開發一定要嚴謹)。

  2. 懶漢模式線程不安全,當多線程調用的時候,需要加上同步鎖,這樣會大大影響程序的運行效率。餓漢模式是線程安全的,一勞永逸,程序運行效率要比懶漢模式高。

以上就是我對懶漢模式和餓漢模式的介紹。題主如果想更好的瞭解設計模式,推薦讀《設計模式:可複用面向對象軟件的基礎》一書。


蘇北小馬鍋


作為一工作了5年的程序員 在這裡我首先要批評你,作為一個合格的程序員 第一要學會的就是會用百度,像你這種基礎問題 百度上能搜出幾百萬個結果,你有這提問的時間 不如 去百度上好好搜索一下 好好學習一下。


平凡暴力貓


兩種方式,前者是在你調用獲取對象的時候判斷是否有對象,沒有就初始化,然後返回;

後者是在static模塊中直接初始化,調用方法好直接返回對象;

兩者區別就是在加載類的時候是否去初始化對象這個區別


分享到:


相關文章: