模式的祕密------單例模式

1.餓漢模式

特點:應用程序啓動時,完成類加載(實例對象的創建),由此可得,加載速度慢,因類已加載完畢,從而運行時獲取對象快;

2.懶漢模式

特點:與餓漢模式相反,調用實例對象創建時慢(調用創建實例方法才進行實例對象的創建)。

代碼如下:

餓漢模式

public class Stringleton {
    //1.將構造方法私有化, 不允許外面直接進行創建
    private Stringleton(){
        
    }
    
    //2.聲明類的唯一實例, 使用 private static修飾
    private static Stringleton stringleton = new Stringleton();
    
    //3.提供一個獲取實例的方法, 使用 public static修飾
    public static Stringleton getInstance() {
        return stringleton;
    }
}

           上述代碼中的一個缺點是該類加載的時候就會直接new 一個靜態對象出來,當系統中這樣的類較多時,會使得啓動速度變慢 。現在流行的設計都是講“延遲加載”,我們可以在第一次使用的時候才初始化第一個該類對象。所以這種適合在小系統。 

懶漢模式

public class Stringleton {
    //1.將構造方法私有化, 不允許外面直接進行創建
    private Stringleton(){
        
    }
    
    //2.聲明類的唯一實例, 使用 private static修飾
    private static Stringleton stringleton ;
    
    //3.提供一個獲取實例的方法, 使用 public static修飾
    public static Stringleton getInstance() {
        if (stringleton == null) {
            synchronized (Stringleton.class) {
                if (stringleton == null) {
                    stringleton = new Stringleton();
                }
            }
        }
        return stringleton;
    }
}

         上述代碼中的一次鎖住了一個方法, 這個粒度(頻率)有點大 ,改進就是隻鎖住其中的new語句就OK。就是所謂的“雙重鎖”機制。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章