1、爲什麼使用單例模式?
(1)避免在開發過程中,創建出一個類的多個實例(佔用空間,性能問題),所以使用單例模式,保證該類只創建一個對象。
(2)一般單例模式通常有兩種形式:它的構造函數爲private的,必須有一個靜態方法,靜態方法返回自己的實例;實現形式有兩種:懶漢式和餓漢式;所謂的餓漢式就是在聲明實例的時候直接初始化對象,而懶漢式是先聲明一個空對象,在靜態方法中實例化該對象並返回。
2、單例模式的寫法:
1、構造方法私有;2聲明private static 的該類屬性;3、提供public static方法返回該實例(先判斷實例過了嗎,如果沒有實例化,則new)
//餓漢模式,很餓很着急,所以類加載時即創建實例化對象,線程安全
//好處:簡單明瞭,無需關注線程安全問題。
//缺點:如果在一個大環境下使用了過多的餓漢單例,則會生產出過多的實例對象,無論你是否要使用他們。
public class Singleton1{
private static Simgleton1 singleton = new Singleton();
private Singletonl(){
}
public static Singletonl getInstance(){
return singleton;
}
}
//飽漢模式,很飽不着急,延遲加載,啥時候用啥時候創建,存在線程安全問題,通過同步(synchronized)可以解決線程不安全問題.
//好處:延時加載,用的時候纔會生產對象。
//缺點:需要保證同步,付出效率的代價。
public class Singleton2{
private static Singleton2 singleton;
private Singleton2(){
}
public static synchronized Singleton2 getInstance(){
if(singleton == null){
singleton = new Singleton2();
}
return singleton;
}
}
//雙重鎖模式
//飽漢模式的雙重鎖模式,進行雙重判斷,當已經創建過實例對象後就無需加鎖,提高效率