試想下有這麼一個場景,有一個類,整個項目都會用得到,使用的概率很頻繁,你還會每用一次就new一次嗎?這樣做不是不可以,但是會很耗內存,這時就要想到用單例了。
單例有如下兩個特點:
1.整個項目只有一個實例。
2.這個實例在項目中使用概率很高
單例又分爲兩種單例:
1.飽漢式單例(使用到了靜態代碼塊,在類load進內存時,就加載了實例)
2.餓漢式單例(在創建實例時,當原來的對象爲null則重新new個,否則還是用已存在的實例)
一般用於工具類比較多,我們直接看代碼如何實現的吧!
/** * 飽漢式單例 */ public class SingleInstance { static{ instance = new SingleInstance(); } private static SingleInstance instance; //將構造函數私有化,使外界無法通過構造函數獲得對象 private SingleInstance() { } public static SingleInstance getInstance() { return instance; } }
單例的優點:/** * 餓漢式單例 * */ public class SingleInstance2 { private static SingleInstance2 instance2; private SingleInstance2(){} public static SingleInstance2 getInstance2() { if (instance2 == null) { instance2 = new SingleInstance2(); } return instance2; } }
1.避免類的重複創建
2.節約內存
3.避免多個實例引起程序邏輯錯誤的場合
以上是個人對單例的理解,如果有理解不當的地方,還請指出,一同進步,多謝了!