以Java為例: 餓漢: 懶漢: 先來看單例模式原理及要求,保證這個類在記憶體中只有一個對象,那麼就不能隨便給別人new,所以必須把構造函數改為private,然後整一個公共靜態方法供外部統一獲取實例。 再來看餓漢以及懶漢定義(原理)以及區別: 餓漢:一開始就吧吃的找好(對象new出來),隨時可以吃 ...
以Java為例:
餓漢:
public final class VirtualCore { private static VirtualCore gCore = new VirtualCore(); private VirtualCore() { } public static VirtualCore get() { return gCore; } }
懶漢:
public final class VirtualCore { private static VirtualCore gCore = null; private VirtualCore() { } public static synchronized VirtualCore get() { if(gCore == null){ gCore = new VirtualCore(); } return gCore; } }
先來看單例模式原理及要求,保證這個類在記憶體中只有一個對象,那麼就不能隨便給別人new,所以必須把構造函數改為private,然後整一個公共靜態方法供外部統一獲取實例。
再來看餓漢以及懶漢定義(原理)以及區別:
餓漢:一開始就吧吃的找好(對象new出來),隨時可以吃
懶漢:懶得動,餓了(有需要)再去找吃的(new 對象)
兩者區別在於,餓漢模式拿空間換時間,一開始就把對象生成,在記憶體中占著,懶漢則是按需生成。註意的是,多線程訪問的時候,
懶漢可能會因為不同步創建多個對象,所以獲取單例的方法加上 synchronized欄位~