模式的祕密---單例模式

單例模式

什麼是設計模式?
設計模式就是經過前人無數次的實踐總結出的,設計過程中可以反覆使用的、可以解決特定問題的設計方法,
也可以理解爲
一套被反覆使用,多數人知曉的,經過分類編目的,代碼設計經驗的總結
其目的是
使用設計模式是爲了可重用代碼,讓代碼更容易被他人理解,保證代碼的可靠性。

首先是餓漢模式:測試代碼如下

package com.example.demo.test2;

/**
 * 單例模式
 * 應用場合:有些對象只需要一個就夠了,如:老婆,古代的皇帝
 * 作用:可以保證整個應用程序中某個實例又且只有一個
 * 類型:餓漢模式,懶漢模式
 */
public class Singleton {

    //1.將構造方法私有話,不允許外部直接創建多個對象
    private  Singleton(){
    }

    //2.創建類的唯一實例 使用private static修飾
   private static Singleton instance=new Singleton();

    //3.提供一個用於獲取實例的方法,使用public static 修飾
    public static Singleton getInstance(){
        return instance;
    }


}

package com.example.demo.test2;


public class Test {

    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不是同一個實例");
        }


    }

}

結果如下:
在這裏插入圖片描述
餓漢模式什麼時候加載?
因爲用static修飾了,所以他就是類變量,在加載類的時候加載,所以在Singleton這個類加載的時候,他就會創建一個唯一的實例。

懶漢模式:

package com.example.demo.test2;

/**
 * 懶漢模式
 */
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;
    }



}

package com.example.demo.test2;


public class Test {

    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不是同一個實例");
        }

        //懶漢模式
        Singleton2 s3=Singleton2.getInstance();
        Singleton2 s4=Singleton2.getInstance();

        if(s3==s4){
            System.out.println("S3和S4是同一個實例");
        }else{
            System.out.println("S3和S4不是同一個實例");
        }



    }

}

在這裏插入圖片描述
懶漢模式只有在使用的時候才加載
餓漢模式和懶漢模式的區別:
餓漢模式的特點是加載類時比較慢,因爲創建類的時候,他就已經加載了這個類的實例,所以加載有點慢,但是它有一個好處,就是在運行時獲取對象的速度比較快 線程安全
懶漢模式的特點是加載類時比較快,因爲創建類的時候它沒有加載類的實例,所以加載會快一點,但是在運行時,獲取對象的速度比較慢 線程不安全

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章