單例設計模式
模式:模式就是解決一類問題的固定步驟
單例設計模式:保證一個類在內存中只有一個對象
舉例:多個瀏覽器向服務器發送請求,只創建一個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