單例模式中的餓漢模式和懶漢模式【一看就懂】


以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字段~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM