單例設計模式(詳解)


單例設計模式

模式:模式就是解決一類問題的固定步驟

單例設計模式:保證一個類在內存中只有一個對象

 

舉例:多個瀏覽器向服務器發送請求,只創建一個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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM