單例設計模式
模式:模式就是解決一類問題的固定步驟
單例設計模式:保證一個類在內存中只有一個對象
舉例:多個瀏覽器向服務器發送請求,只創建一個servlet對象處理相應的請求,而不是每接收一個請求,就創建一個servlet對象

1.餓漢單例設計模式
1.私有化構造函數
2.聲明本類的引用類型變量,並且使用該變量指向本類對象
3.提供一個公共靜態的方法獲取本類的對象
//保證Single在內存中只有一個對象
public class Single {
//私有化構造函數
private Single(){
}
//聲明本類的引用類型變量,並且使用該變量指向本類對象
private static Single single = new Single();
//提供一個公共的方法獲取本類的對象
public static Single getInstance(){
return single;
}
}
class Test{
public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
boolean flag = s1.equals(s2);
System.out.println("是同一個對象嗎?"+flag);
}
}
運行結果: 是同一個對象嗎?true
2.懶漢單例設計模式
1.私有化構造函數
2.聲明本類的引用類型變量,但不要創建對象
3.提供靜態公共的方法獲取本類的對象,獲取之前先判斷是否已經創建了本類對象,如果已經創建了,那么直接返回對象即可,如果還沒創建,那么先創建本類的對象,然后再返回。
//保證Single在內存中只有一個對象
public class Single {
//私有化構造函數
private Single(){
}
//聲明本類的引用類型變量,
private static Single single ;
//提供一個公共的方法獲取本類的對象
public static Single getInstance(){
if(single == null){//判斷對象是否創建
single = new Single();
}
return single;
}
}
class Test{
public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
boolean flag = s1.equals(s2);
System.out.println("是同一個對象嗎?"+flag);
}
}
運行結果: 是同一個對象嗎?true
