1. 程式人生 > >單例模式(懶漢模式與餓漢模式)

單例模式(懶漢模式與餓漢模式)

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.餓漢模式與懶漢模式的區別:
餓漢模式:載入類時比較慢,因為需要時間去建立物件,但是在獲取類的例項速度比較快,因為例項已經存在無需建立,另外,執行緒安全;
懶漢模式:載入類時比較快,因為載入類時不需要建立物件,但在獲取類的例項速度比較慢,因為需要去建立物件,另外,執行緒不安全,可能多個執行緒同時訪問獲取例項的方法。