java基礎-單例模式
阿新 • • 發佈:2018-11-17
java中的定義:
單例模式( Singleton模式),一個類有且僅有一個例項,並且自行例項化向整個系統提供(公開)。
單例模式的三個要點
具體實現的角度來說:
- 構造方法私有化
- 靜態屬性指向例項
public static
的getInstance
方法,返回第二部的靜態屬性
餓漢單例模式
餓漢模式,無論如何都會建立一個例項
/*
*例子取自http://how2j.cn
*以lol中的大龍(GiantDragon)為例。
*大龍只有一隻,所以該類,只能被例項化一次。
*/
package charactor;
public class GiantDragon {
//私有化構造方法使得該類無法在外部通過new 進行例項化
private GiantDragon(){
}
//準備一個類屬性,指向一個例項化物件。 因為是類屬性,所以只有一個
private static GiantDragon instance = new GiantDragon();
//public static 方法,提供給呼叫者獲取物件
public static GiantDragon getInstance(){
return instance;
}
}
懶漢單例模式
懶漢式單例模式與餓漢式單例模式不同,只有在呼叫getInstance()
的時候,才會建立例項。
package charactor;
public class GiantDragon {
//私有化構造方法使得該類無法在外部通過new 進行例項化
private GiantDragon(){
}
//準備一個類屬性,用於指向一個例項化物件,但是暫時指向null
private static GiantDragon instance;
//public static 方法,返回例項物件
public static GiantDragon getInstance(){
//第一次訪問的時候,發現instance沒有指向任何物件,這時例項化一個物件
if(null==instance){
instance = new GiantDragon();
}
//返回 instance指向的物件
return instance;
}
}
補充:還有一種雙重鎖模形式。
什麼時候使用餓漢式,什麼時候使用懶漢式?
餓漢式,是立即載入的方式,無論是否會用到這個物件,都會載入。
如果在構造方法裡寫了效能消耗較大,佔時較久的程式碼,比如建立與資料庫的連線,那麼就會在啟動的時候感覺稍微有些卡頓。
懶漢式,是延遲載入的方式,只有使用的時候才會載入。 並且有執行緒安全的考量。
使用懶漢式,在啟動的時候,會感覺到比餓漢式略快,因為並沒有做物件的例項化。 但是在第一次呼叫的時候,會進行例項化操作,感覺上就略慢。