Android中常用的設(shè)計(jì)模式----單例

單例模式可能是平常開發(fā)中使用最多的模式了。

那么單例模式是怎么樣的:單例模式的類必須保證只有一個實(shí)例存在。多用于整個程序只需要有一個實(shí)例,通常很消耗資源的類,比如網(wǎng)絡(luò)請求,IO操作,訪問數(shù)據(jù)庫等。由于類比較耗資源,所以沒必要讓它構(gòu)造多個實(shí)例。
單例的定義
確保某一個類只有一個實(shí)例,并且自行實(shí)例化,向整個系統(tǒng)提供這個唯一實(shí)例。


單例的幾種實(shí)現(xiàn)方式

餓漢式:

 public class Singleton {
    private static final Singleton instance = new Singleton();

    private  Singleton() {}

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

優(yōu)點(diǎn):
①線程安全
②類加載時已經(jīng)創(chuàng)建好了一個靜態(tài)對象,調(diào)用時反應(yīng)快。
缺點(diǎn):
①資源效率不高,可能沒有使用getInstance,但是其他途徑加載了
該類,這個實(shí)例依然會初始化。

懶漢式:

public class Singleton{
    private static Singleton instance;
    
    private Singleton(){}
    
    public static **synchronized** Singleton getInstance(){//注意同步
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

優(yōu)點(diǎn):
資源利用率高,延遲初始化,可使用類其他靜態(tài)方法。
缺點(diǎn):
第一次加載慢,多線程情況下不必要的同步開銷增大。

雙重校驗(yàn)鎖:

public class Singleton{
    private volatile static Singleton instance;//注意volatile 關(guān)鍵字
    
    private Singleton(){}
    
    public static synchronized Singleton getInstance(){
        if(instance == null){
            synchronized(Singleton.class){
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

}

添加了volatile關(guān)鍵字,保證了執(zhí)行順序。保證了高并發(fā)下會出現(xiàn)的問題。

靜態(tài)內(nèi)部類:

public class Singleton{
    private Singleton(){}
    
    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }
    
    private static class SingletonHolder{
        private static final Singleton instance = new Singleton();
    }
}

\color{#FF0000}{推薦使用雙重校驗(yàn)鎖或者使用靜態(tài)內(nèi)部類方式,在非高并發(fā)情況下,去掉雙重校驗(yàn)鎖的volatile也可以}

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

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

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