單例模式

三種單例模式:

1.Singelton實例在什么時候創建是不受控制的,對于靜態成員instance,它會在類第一次初始化的時候被創建,這個時刻并不一定是getIntstance

public class Singleton{
    //在相同的任何地方引用這個STATUS都會導致instance實例被創建
    public static int STATUS = 1;
    private Singleton(){
        System.out.println("Singleton is create");
    }
    private static Singleton instance = new Singleton();
    public static Singleton getInstence(){
        return instance;
    }
}

2.為了防止對象被多次創建,使用Synchronized進行方法同步,充分利用了延遲加載,只在真正需要時創建對象

public class LazySingleton{
    private LazySingleton(){
        System.out.println("LazySingleton is create");
    }
    private static LazySingleton instance = null;
    public static synchronized LazySingleton getInstence(){
        if(instance==null){
            instance = new LazySingleton();
        }
        return instance;
    }
}

3.在getInstance()中沒有鎖,這使在高并發環境下性能優越,其次只有在第一次調用時,StaticSingleton的實例才會被創建,巧妙地使用了內部類和類的初始化方式

public class StaticSingleton{
    private StaticSingleton(){
        System.out.println("StaticSingleton is create");
    }
    private static class SingletonHolder{
        private static StaticSingleton instance = new StaticSingleton();
    }
    private static StaticSingleton getInstance(){
        return SinlgetonHolder.instance;
    }
}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容