23中設計模式單例模式

所謂的單例模式就是再創建對象時候只允許創建一個對象!並且提供一個訪問該實例的全局訪問點

單例模式又分爲餓漢式,懶漢式,靜態內部類式,枚舉式,雙重檢測鎖式(由於JVM的底層內部模型願意,偶爾會報錯,所以不推薦使用)



下面我們來看一下餓漢式單例模式:

public class SingletonDemo01 {
	private static SingletonDemo01 singleton=new SingletonDemo01();
	
	private SingletonDemo01(){
		
	}
	//因爲加載類時是天然的線程安全的,所以不用加同步塊
	public static SingletonDemo01 getInstance(){
		
		return singleton;
	} 

}
懶漢式單例模式:
public class SingletonDemo01 {
    private static SingletonDemo01 singleton;
    
    private SingletonDemo01(){
        
    }
    //加同步塊,防止不同步造成加載多個對象,這樣就沒有單例的實際意義,也可能會造成錯誤
    public static synchronized SingletonDemo01 getInstance(){
        if(singleton == null){
            singleton = new SingletonDemo01();
        }
        return singleton;
    } 
}
靜態內部類式單例模式
public class SingletonDemo01 {
   //靜態的內部類,實現的對象的創建
    private static class SingletonDemoInstance{
        //此處的final可加可不加
        private static final SingletonDemo01 singleton=new SingletonDemo01();
    }
    private SingletonDemo01(){}
    public static SingletonDemo01 getInstance(){
        return SingletonDemoInstance.singleton;
    }
}
PS: 1、外部類有static 屬性,則不會像創建餓漢式那樣立即加載對象了,只有真正的調用到getInstance()纔會加載靜態內部類,加載時候是線程安全的,instance是static final
       類型的,保證了內存中只有一個這樣的實例存在,而且只能被賦值一次,從而保證的線程的安全
    2、兼備了併發高效調用和延遲加載的優勢。




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