Java基礎 設計模式-單例模式

單例模式的概念:

確保一個類只有一個實例,且自動實例化向外提供這個實例。

使用場景:

1.要求生唯一對象的場景

2.需求提供一個共享訪問或者共享數據

3.創建一個對象需要消耗過多資源,如要訪問IO 或數據庫資源

4.需要定義大量的靜態變量和靜態方法的場景 ,如工具類

常見寫法:

傳說中的餓漢:

/**
 * 餓漢,
 * 線程安全,
 */
public class ESingleton {
    //初始化時生成實例
    private static ESingleton singleton = new ESingleton();
    //必須是私有
    private ESingleton(){

    }
    //對外提供實例的訪問
    public static ESingleton getInstance(){
        return singleton;
    }

}

傳說中的懶漢:

/**
 * 懶漢,
 * 線程不安全,不適用高併發場景,
 */
public class LSingleton {

    private static LSingleton singleton = null;
    private LSingleton(){

    }
    //使用實例時沒有實例化過再初始化
    public static LSingleton getInstance(){
        if (singleton ==null){
            singleton = new LSingleton();
        }
        return singleton;
    }

}

解決 線程不安全問題,可以給 getInstance 方法加上 synchronized 關鍵字。 

變種寫法:

public class Dog {

    private Dog() {
    }

    private static class DogHolder {
        private static final Dog dog = new Dog();

    }

    public static Dog getInstance() {
        return DogHolder.dog;
    }

    public static void bark() {
        System.out.println("汪汪汪 ");
    }
    public void eat() {
        System.out.println("就是吃");
    }
}

定義參考:《設計模式之禪

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