爲什麼使用單例模式和單例模式的寫法

1、爲什麼使用單例模式?

(1)避免在開發過程中,創建出一個類的多個實例(佔用空間,性能問題),所以使用單例模式,保證該類只創建一個對象。

(2)一般單例模式通常有兩種形式:它的構造函數爲private的,必須有一個靜態方法,靜態方法返回自己的實例;實現形式有兩種:懶漢式和餓漢式;所謂的餓漢式就是在聲明實例的時候直接初始化對象,而懶漢式是先聲明一個空對象,在靜態方法中實例化該對象並返回。

2、單例模式的寫法:

1、構造方法私有;2聲明private static 的該類屬性;3、提供public static方法返回該實例(先判斷實例過了嗎,如果沒有實例化,則new)

//餓漢模式,很餓很着急,所以類加載時即創建實例化對象,線程安全

//好處:簡單明瞭,無需關注線程安全問題。

//缺點:如果在一個大環境下使用了過多的餓漢單例,則會生產出過多的實例對象,無論你是否要使用他們。

public class Singleton1{

    private static Simgleton1 singleton = new Singleton();

    private Singletonl(){

    }

    public static Singletonl getInstance(){

        return singleton;

    }

}

//飽漢模式,很飽不着急,延遲加載,啥時候用啥時候創建,存在線程安全問題,通過同步(synchronized)可以解決線程不安全問題.

//好處:延時加載,用的時候纔會生產對象。

//缺點:需要保證同步,付出效率的代價。

 

public class Singleton2{

    private static Singleton2 singleton;

    private Singleton2(){

    }

    public static synchronized Singleton2 getInstance(){

        if(singleton == null){

            singleton = new Singleton2();

        }

    return singleton;

    }

}

//雙重鎖模式

//飽漢模式的雙重鎖模式,進行雙重判斷,當已經創建過實例對象後就無需加鎖,提高效率

public class Singleton3{

    private static Singleton singleton3;

    private Singleton3(){

    }

    public static Singleton3 getInstance(){

    if(singleton == null){

        synchronized(Singleton2.class){

            if(singleton == null){

                singleton = new Singleton3();

                }

            }

        }

    return singleton;

    }

}

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