java 單例模式

2021-09-19 17:29:54 字數 1511 閱讀 7410

單例模式實現要點:

1、建構函式私有化

2、保證只會例項化乙個物件

1、飽漢式

優點:實現簡單,安全

缺點:唯一的物件在類本身完成例項化的時候就會被構造,但如果從未使用過這個物件,就會造成記憶體浪費。

比如下面**,只是使用了靜態方法,未使用過物件,但物件也被構造了,並且會自始至終都存在。

//飽漢式

class singleton

//將唯一的物件設定為常量

private final static singleton instance=new singleton();

//提供獲取物件的外部介面

public static singleton getinstance()

public static void method()

}public class mytest

}

執行結果:

建構函式被呼叫

method方法被呼叫

2、懶漢式【不可用】

優點:實現了lazy loading,在下面**中可以看出,不使用instance的時候instance是不會初始化的。

缺點:多執行緒下不安全,如果執行緒a進入了if(instance==null)的判斷後被打斷,執行緒b又進入了if(instance==null),並且繼續執行,這時已經例項化了乙個物件。a再回來執行時,因為已經判斷過了,所以又例項化了乙個物件,就違反了單例的原則。

class singleton

private static singleton instance;

public static singleton getinstance()

return instance;

}public static void method()

}public class lazysingleton

}

執行結果:

method方法被呼叫

3、懶漢式雙重判斷

針對懶漢式執行緒不安全問題有乙個逐步的完善過程,雙重判斷是最終可用並且不影響效率的版本

優點:lazy loading 並且執行緒安全

缺點:書寫麻煩(如果算的話)

class singleton 

private static singleton instance;

public static singleton getinstance()

return instance;

}}

4、內部靜態類實現單例

優點:安全,高效,lazy loading

class singleton

private static class singletoninstance

public static singleton getinstance()

}

參考:

僅為記錄學習過程,如有錯誤,請多指教

java單例模式

第一種方法 public class singleton private static singleton singleton new singleton public static singleton getinstance 第二種方法 public class singleton private...

Java 單例模式

單例模式特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。一 餓漢式單例 基於classloder機制避免了多執行緒的同步問題,使用較多 public class singleton 這裡提供了乙個供外部訪問本class的靜態方法,可...

Java單例模式

單例模式的意圖是為了確保乙個類有且僅有乙個例項,並為它提供乙個全域性訪問點。單例模式通過隱藏建構函式,提供物件建立的唯一入口點,從而將類的職責集中在類的單個例項中。design patterns一書中把單例模式歸類為 建立型 模式,意圖是在表明單例物件承擔了其他物件所要依賴的職責。單例模式的優點 在...