提到單例模式的話相信很多人都不會陌生,一般初級程序員也知道懶漢模式和餓漢模式。
那么什么是單例模式呢?我個人低的理解就是當用這個類的對象的時候就只能創建同一個對象。是你,是你,還是你!
而在單例模式中又經常是懶漢和惡漢式進行加載。並沒有痴漢也沒有電車。。。我什么都不知道。
什么是餓漢模式呢?很飢餓,你想想,當人很飢餓時候是不是就有什么吃什么,那就是這個道理,所以就已加載類就創建對象。就好像當剛建好一個房子。主人就 搬了進去也不等裝修。
那么她的代碼是怎么實現的呢?
這就是餓漢模式。但是這個有一個問題,是什么呢?那就是如果我只想要這個類的一個靜態方法,那么當我在調用這個靜態方法時,這個對象也就被創建了,那么這無疑是耗費內存的。就好比我給別人介紹一個房子,說這房子怎么樣,廚房排風系統很好。這時主人突然就跑了出來,快買快買。這就尷尬了。就好比這個冷笑話。
那么既然餓漢有點不能滿足,試試懶漢模式吧。懶漢模式就是用的時候再去加載。就好比剛才我給別人介紹了房子的各種好,客人終於動心了就想買,這時候房子主人才出來和客人進行下一步的溝通。好我們繼續看代碼。
這就是懶漢模式,這個由於沒有靜態塊那么就不會再類加載時就創建對象。只有調用這個方法時候才創建對象,而且需要判斷,就好比客人說接下來就和主人談吧,主任說談過了就和以前那個談。沒談過我現在就出來(這個例子是呼應那個判斷。感覺有點欠火候)總覺得判斷有點不夠簡潔,不僅有人要說了:就你事多!不判斷哪知道要不要創建對象。
那么有沒有既能可以調用其他方法不創建對象,又能創建對象不需要判斷 就是同時修改了餓漢和懶漢的缺點的。有的!請看
看到沒,他就避免了兩個缺點,集美貌與優雅於一身。相對餓漢的靜態塊,他用了靜態內部類。相對於懶漢的每次調靜態方法都要進行判斷,他采取靜態內部類保證只之初創見一次對象。perfect!