java設(shè)計(jì)模式------單例模式

該模式是與具體的項(xiàng)目業(yè)務(wù)無關(guān)的設(shè)計(jì)模式

單例模式,是一種常用的軟件設(shè)計(jì)模式。在它的核心結(jié)構(gòu)中只包含一個(gè)被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例。即一個(gè)類只有一個(gè)對象實(shí)例

模式如圖:

單例模式

單列模式有很多種,下面來一種一種的介紹。

1.懶漢式,也是常用的形式。
public class SingletonClass{
    private static SingletonClass instance=null;
    //線程安全,但是延遲加載,去掉synchronized關(guān)鍵字,就線程不安全了
    public static synchronized SingletonClass getInstance(){
        if(instance==null){
               instance=new SingletonClass();
        }
        return instance;
    }
    //構(gòu)造函數(shù)是私有的,自己才可以用
    private SingletonClass(){
    }
}
2.:餓漢式,不延遲加載,線程安全
public class Singleton{
    //在自己內(nèi)部定義自己的一個(gè)實(shí)例,只供內(nèi)部調(diào)用
    private static final Singleton instance = new Singleton();
    private Singleton(){
        //do something
    }
    //這里提供了一個(gè)供外部訪問本class的靜態(tài)方法,可以直接訪問
    public static Singleton getInstance(){
        return instance;
    }
}
3.雙重校驗(yàn)鎖(DCL),延遲加載,線程安全
public class Singleton{
    private static volatile Singleton instance=null;
    private Singleton(){
        //do something
    }
    //這個(gè)模式將同步內(nèi)容下方到if內(nèi)部,提高了執(zhí)行的效率,不必每次獲取對象時(shí)都進(jìn)行同步,只有第一次才同步,創(chuàng)建了以后就沒必要了。
    //處理高并發(fā)的懶漢式
    public static  Singleton getInstance(){
        if(instance==null){
            synchronized(Singleton.class){
                if(instance==null){
                    instance=new Singleton();
                }
            }
        }
        return instance;
     }
}
4.靜態(tài)內(nèi)部類,延遲加載,線程安全
public class Singleton {  
    /**
     * 類級的內(nèi)部類,也就是靜態(tài)的成員式內(nèi)部類,該內(nèi)部類的實(shí)例與外部類的實(shí)例
     * 沒有綁定關(guān)系,而且只有被調(diào)用到才會裝載,從而實(shí)現(xiàn)了延遲加載
     */  
    private static class SingletonHolder {  
        private static Singleton instance = new Singleton();  
    }  
  
    private Singleton() {  
    }  

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

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

  • Java設(shè)計(jì)模式——單例模式 單例模式應(yīng)該是大家最為熟知的一種設(shè)計(jì)模式了,相信大家或多或少的都在自己的項(xiàng)目中使用過...
    gogoingmonkey閱讀 575評論 0 2
  • 概念 java中單例模式是一種常見的設(shè)計(jì)模式,單例模式的寫法有好幾種,比較常見的有:懶漢式單例、餓漢式單例。單例模...
    怡紅快綠閱讀 546評論 0 0
  • 單例模式由于只創(chuàng)建了唯一對象可以避免資源的多重占用,減少內(nèi)存的開銷,對于經(jīng)常性使用對象的類來說,單例是一個(gè)不錯(cuò)的選...
    InBinfen閱讀 448評論 2 2
  • 單例模式在我們?nèi)粘i_發(fā)中算是使用頻率最高的設(shè)計(jì)模式了,為什么單例模式的使用頻率會這么高呢? 有時(shí)我們的對象會占用一...
    MrKing5946閱讀 240評論 0 0
  • 單例模式是設(shè)計(jì)模式中使用最普遍的設(shè)計(jì)模式之一。它是一種對對象創(chuàng)建模式,主要用于產(chǎn)生一個(gè)對象的具體唯一實(shí)例,它可以確...
    凡星軌跡閱讀 806評論 0 49

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