爲什麼使用單例模式:
在開發中如果頻繁的實例化對象會很佔用內存,會導致內存溢出,所以最好根據需求儘量少實例化對象,使用單例模式可以確保只有一個實例會被創建。單例模式也給了我們一個全局的訪問點,和全局變量一樣方便,又沒有全局變量的缺點
經典的單例模式
懶漢子模式:懶漢子模式線程安全但是當進行垃圾回收被回收掉的時候就會出空指針異常
public class SingletonTest {
// 定義一個私有的構造方法
private SingletonTest() {
}
// 將自身的實例對象設置爲一個屬性,並加上Static和final修飾符
private static final SingletonTest instance = new SingletonTest();
// 靜態方法返回該類的實例
public static SingletonTest getInstance() {
return instance;
}
}
飽漢子模式:非線程安全,多線程高併發的時候會創建很多實例
public class SingletonTest {
private SingletonTest() {
}
private static SingletonTest instance;
public static SingletonTest getInstance() {
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
優化版本:保證線程安全
public class SingletonTest {
private SingletonTest() {
}