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

懶漢模式

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

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

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

餓漢模式

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

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

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

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

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