單例模式 - 5種實現方式

1、餓漢。線程安全,類裝載時就實例化。

public class SingleInstance {

    private SingleInstance(){}

    private static SingleInstance mSingleInstance = new SingleInstance();

    public static SingleInstance getInstance(){
        return mSingleInstance;
    }

}

2、懶漢。懶加載,效率較低。

public class SingleInstance {

    private SingleInstance(){}

    private static SingleInstance mSingleInstance;

    public static synchronized SingleInstance getInstance(){
        if (mSingleInstance == null) {
            mSingleInstance = new SingleInstance();
        }
        return mSingleInstance;
    }
}

3、雙重校驗鎖。使用volatile變量,輕量級的同步機制。

public class SingleInstance {

    private SingleInstance(){}

    private volatile static SingleInstance mSingleInstance;

    public static SingleInstance getInstance(){
         
        if (mSingleInstance == null) {
            synchronized (SingleInstance.class) {
                if (mSingleInstance == null) {
                    mSingleInstance = new SingleInstance();
                }
            }
        }
        return mSingleInstance;
    }
 }

4、靜態內部類

public class SingleInstance {

    private SingleInstance(){}

    public static SingleInstance getInstance(){
        return SingleHolder.instance;
    }

    private static class SingleHolder {
        private static SingleInstance instance = new SingleInstance();
    }

}

5、枚舉

public enum SingleInstance {
    INSTANCE;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 單例模式(SingletonPattern)一般被認為是最簡單、最易理解的設計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,292評論 4 34
  • 1 場景問題# 1.1 讀取配置文件的內容## 考慮這樣一個應用,讀取配置文件的內容。 很多應用項目,都有與應用相...
    七寸知架構閱讀 6,885評論 12 68
  • 前言 本文主要參考 那些年,我們一起寫過的“單例模式”。 何為單例模式? 顧名思義,單例模式就是保證一個類僅有一個...
    tandeneck閱讀 2,538評論 1 8
  • 單例模式的實現 單例模式的實現一般來說有2種方式:懶漢式(延遲加載)、餓漢式(非延遲加載)。 1. 餓漢式(非延遲...
    JerryL_閱讀 980評論 0 3
  • 有那么的一個人,我很自信,你找到我,絕對是你的幸運。我沒有不良惡習,我有滿滿的正能量。有句名言,上帝為你關閉一扇門...
    淡水云煙2017閱讀 186評論 0 0