單例模式(懶漢模式與餓漢模式)
阿新 • • 發佈:2019-01-24
1.單例模式:
應用場景:當系統中只需要一個物件就夠了,如工作管理員、古代皇帝、現代老婆
作用:保證在一個系統中有且只有一個例項
型別:餓漢模式、懶漢模式
2.餓漢模式:
public class Singleton {
//1.私有化構造方法,讓其他類無法通過new的方式建立該類的例項
private Singleton(){
}
//2.建立類的唯一例項,使用private static關鍵字修飾
private static Singleton instance = new Singleton();
//3.對外部提供一個獲取該類例項的方法,使用public static關鍵字修飾
public static Singleton getInstance(){
return instance;
}
}
測試程式碼:
public class TestSingleton {
public static void main(String[] args) {
//餓漢模式
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if(s1 == s2){
System.out .println("s1 == s2");
}else{
System.out.println("s1 != s2");
}//s1==s2
}
}
3.懶漢模式:
public class Singleton2 {
//1.構造方法私有化,不讓外部直接建立物件
private Singleton2(){
}
//2.宣告類的唯一例項,使用private static 關鍵字修飾
private static Singleton2 instance;
//3.對外部提供一個獲取該類例項的方法,使用public static關鍵字修飾
public static Singleton2 getInstance(){
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}
測試程式碼:
public class TestSingleton2 {
public static void main(String[] args) {
//懶漢模式
Singleton2 s1 = Singleton2.getInstance();
Singleton2 s2 = Singleton2.getInstance();
if(s1 == s2){
System.out.println("s1 == s2");
}else{
System.out.println("s1 != s2");
}//s1==s2
}
}
4.餓漢模式與懶漢模式的區別:
餓漢模式:載入類時比較慢,因為需要時間去建立物件,但是在獲取類的例項速度比較快,因為例項已經存在無需建立,另外,執行緒安全;
懶漢模式:載入類時比較快,因為載入類時不需要建立物件,但在獲取類的例項速度比較慢,因為需要去建立物件,另外,執行緒不安全,可能多個執行緒同時訪問獲取例項的方法。