單例模式

Singleton單例模式

單例類負責創建自己的唯一實例,併爲其他對象提供這一實例。

主要解決:一個全局實用類頻繁地創建與銷燬。

關鍵:構造函數私有化

舉個栗子(=.=)

//創建一個單例類
public class Singleton {

//創建自己的唯一實例
private static Singleton instance = new Singleton();

//構造函數私有化
private Singleton() {
}

//爲外界提供唯一對象
public static Singleton getInstance(){
return instance;
}
public void show(){
System.out.println("summer vibe");
}
}

測試類

public class Test {
public static void main(String[] args) {

//從單例類那兒拿到唯一對象
Singleton singleton = Singleton.getInstance();

//調用單例類方法
singleton.show();
}
}

運行結果:

summer vibe

-----------------這裏是分割線-------------

單例模式的實現方式

1、懶漢式(線程不安全)

特點:最基本的實現方式,懶加載,不支持多線程

public class Singleton{
    //懶加載
    private static Singleton instance;

    private Singleton (){} 

    public static Singleton getInstance() {
        if (instance == null) { 
            instance = new Singleton();
        } 
    return instance;
    } 
}

懶漢式(線程安全)

優點:第一次調用才初始化,避免內存浪費。

缺點:必須加鎖 synchronized 才能保證單例,但加鎖會影響效率。

public class Singleton {

    private static Singleton instance; 

    private Singleton (){} 

    public static synchronized Singleton getInstance() {
           if (instance == null) {
                instance = new Singleton(); 
            } return instance; 
    }
}

2、餓漢式

優點:沒有加鎖,執行效率會提高。( 基於 classloader 機制避免了多線程的同步問題)

缺點:類加載時就初始化,浪費內存。

public class Singleton {
    //類裝載時就實例化
    private static Singleton instance = new Singleton();

    private Singleton (){} 
    
    public static Singleton getInstance() {
        return instance; 
    }
}

還有幾種實現方式,後續更新吧。。。。。。

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