Java設計模式之單例模式

張瘋子啊發表於2020-12-02

  設計模式:就是根據問題和需求,在大量實踐中總結和理論化之後優選的程式碼結構,程式設計風格以解決問題的方式。
  單列模式:在設計一個類時,該類的例項在整個程式中只有一個例項物件。列如:世界上只有一個月亮。
1、餓漢模式:

public class SinglePattern {
    /*
     * 1,類的構造方法私有化,不能通過new關鍵字建立例項
     * 2,類的內部建立一個該類的例項,使用靜態變數引用該物件
     * 3,定義一個靜態方法返回該例項物件
     * */
    //私有構造方法
    private SinglePattern() {}
    //建立該類的例項物件
    private static SinglePattern single = new SinglePattern();
    //公開的靜態方法,返回該類例項
    public static SinglePattern getSingleP() {
        return single;
    }
}

2、懶漢模式:

public class SinglePattern {
    //私有構造方法
    private SinglePattern() {}
    //建立該類的例項物件
    private static SinglePattern single = null;
    //公開的靜態方法,返回該類例項
    public static SinglePattern getSingleP() {
        if (single == null){
            single = new SinglePattern();
        }
        return single;
    }
}

懶漢單例模式是執行緒不安全的,多執行緒情況下有可能存在多個例項,可以通過synchronized關鍵字來達到執行緒安全。
1、在getSingleP()方法上加synchronized 關鍵字

public class SinglePattern {
    //私有構造方法
    private SinglePattern() {}
    //建立該類的例項物件
    private static SinglePattern single = null;
    //公開的靜態方法,返回該類例項
    public static synchronized SinglePattern getSingleP() {
        if (single == null){
            single = new SinglePattern();
        }
        return single;
    }
}

2、通過同步程式碼塊解決

public class SinglePattern {
    //私有構造方法
    private SinglePattern() {
    }
    //建立該類的例項物件
    private static SinglePattern single = null;
    //公開的靜態方法,返回該類例項
    public static SinglePattern getSingleP() {
        if (single == null){
            synchronized (SinglePattern.class){
                single = new SinglePattern();
            }
        }
        return single;
    }
}

相關文章