設計模式之單例模式

1:簡介
單例模式,是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實例。即一個類只有一個對象實例。

2:單例模式的特點
2.1、單例類只能有一個實例。
  2.2、單例類必須自己創(chuàng)建自己的唯一實例。
  2.3、單例類必須給所有其他對象提供這一實例。

3:最簡單的單例模式,也稱之為餓漢式

public class Singleton {
    
    public static Singleton mSington = new Singleton();
    
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

4:懶漢式 (線程不安全),為什么叫做懶漢式,主要靜態(tài)實例一開始并沒有初始化,而是使用的時候才開始進行初始化。同時,下面這種寫法是不安全的。

public class Singleton {
    
    public static Singleton mSington ;// = new Singleton();
    
    public static Singleton getInstance(){
        if (mSington == null) {
            mSington = new Singleton();
        }
        return mSington;
    }
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

5:這也是懶漢式,不過加了synchronized關鍵字,在多線程調(diào)用的時候是安全的,性能相對來說比較差。

public class Singleton {
    
    public static Singleton mSington ;// = new Singleton();
    
    public static synchronized Singleton getInstance(){
        if (mSington == null) {
            mSington = new Singleton();
        }
        return mSington;
    }
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

6:變種餓漢式(使用靜態(tài)代碼塊去初始化),這種也是線程不安全的。

public static Singleton mSington ;// = new Singleton();
    
    static{
        mSington = new Singleton();
    }

7:DCL單例(double check),這是單例99%的情況下都是線程安全的,不過在高并發(fā)下,也會導致異常。具體需要去分析字節(jié)碼加載進jvm的情況、

public class Singleton {
    
    public static Singleton mSington ;// = new Singleton();
    
    public static Singleton getInstance(){
        if (mSington == null) {
            synchronized (Singleton.class) {
                if (mSington == null) {
                    mSington = new Singleton();
                }
            }
        }
        return mSington;
    }
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

總而言之,到最后,單例模式無非就是在內(nèi)存中只有一份實例。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 前言 本文主要參考 那些年,我們一起寫過的“單例模式”。 何為單例模式? 顧名思義,單例模式就是保證一個類僅有一個...
    tandeneck閱讀 2,630評論 1 8
  • 最近學習了Java的幾種常規(guī)的設計模式,內(nèi)容較多,思維方式多種多樣,故將所學整理一下,寫成博客,分享并加深自己的理...
    Airing閱讀 909評論 1 10
  • 一.什么是單例模式 單例模式的定義:確保一個類只有一個實例,并提供一個訪問他的全局訪問點。單例模式是幾個設計模式中...
    Geeks_Liu閱讀 2,330評論 0 10
  • 單例模式應該是大家最為熟知的一種設計模式了,相信大家或多或少的都在自己的項目中使用過單例模式,例如封裝一個Log工...
    晨鳴code閱讀 501評論 3 2
  • 大話設計模式之___單例模式 什么是單例模式單例模式有哪些(會順帶講些懶漢式的性能優(yōu)化)懶漢式與餓漢式的區(qū)別 什么...
    Agelier閱讀 1,850評論 0 10

友情鏈接更多精彩內(nèi)容