国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

單例模式

duan199226 / 3166人閱讀

摘要:各種寫法單例的寫法有很多,相信大家都知道的應(yīng)該是餓漢與飽漢式。寫在最后本打字員覺得,單例模式實(shí)在是所有模式中用情最專一的模式了,知道為什么嗎,因?yàn)槭褂昧怂院螅阋簧荒芏抑粫?huì)擁有一個(gè)對(duì)象了

簡(jiǎn)單說幾句

本文首發(fā)公眾號(hào)【一名打字員】

說起這個(gè)單例,簡(jiǎn)直是人名中的張偉、代碼圈中的八阿哥,已經(jīng)被廣泛的所使用。但是你真的會(huì)單例么?來我們拭目以待吧。

各種寫法

單例的寫法有很多,相信大家都知道的應(yīng)該是餓漢與飽漢式。

餓漢式

public class Singleton{

    private static Singleton instance = new Singleton();
    
    private Singleton(){}  
    
    public static Singleton getInstance(){  
        return instance;  
    }  
}

所謂餓漢式,就是餓了太久了,上來就開始吃。這種方式在這個(gè)類加載的時(shí)候就創(chuàng)建了實(shí)例,方便我們可以在其他地方直接使用,但是缺點(diǎn)就是不管有沒有用到這個(gè)類的方法,他都會(huì)創(chuàng)建,會(huì)造成不必要的開銷。

飽漢式

public class Singleton{

    private static Singleton instance = null;
    
    private Singleton(){}
    
    public static Singleton getInstance(){  
        if(null == instance){  
            instance = new Singleton();  
        }  
        return instance;  
    }  
}  

顯而易見,飽漢式與餓漢式剛好對(duì)立,一個(gè)餓太久了,上來就吃,一個(gè)沒吃就吃、吃飽了就不吃了。在需要獲取實(shí)例的時(shí)候才回去創(chuàng)建新的對(duì)象,在我們使用頻率比較少的時(shí)候以及創(chuàng)建一次實(shí)例需要消耗比較大的資源時(shí),推薦使用這種方式。

雙重檢查鎖

但是,與餓漢式不會(huì)存在多線程創(chuàng)建多個(gè)實(shí)例不同的是,飽漢式無法保證線程安全,可能會(huì)導(dǎo)致多個(gè)線程使用創(chuàng)建多個(gè)實(shí)例,機(jī)智的我們肯定會(huì)加上一個(gè)同步鎖,但是這樣效率肯定就不行了。因?yàn)槊看握{(diào)用生成實(shí)例的話都需要在同步那里進(jìn)行等待,所以,就出現(xiàn)了雙重檢查鎖。

public class Singleton{

    private static volatile Singleton singleton = null;
     
    private Singleton(){}
     
    public static Singleton getInstance(){
        if(singleton == null){
            synchronized (Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }    
}

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

先貼上代碼:

public class Singleton {
    private static class Holder {
        private static Singleton singleton = new Singleton();
    }
     
    private Singleton(){}
         
    public static Singleton getInstance(){
        return Holder.singleton;
    }
}

這樣的方法,既保證了線程的安全,也能按需加載,貌似看起來是最優(yōu)的方法了。

枚舉

相信很多打字員都應(yīng)該知道還有一種很優(yōu)雅的寫法,就是枚舉。

public enum Singleton {

    INSTANCE;
    
    private String name;
    
    public String getName(){
        return name;
    }
    
    public void setName(String name){
        this.name = name;
    }
}

這種方法本打字員是在Effective Java中了解到了,之前還真的沒了解過,而且在書中推薦的就是這種寫法,原因是Prevent reflection forcibly call the constructor,意思差不多就是防止反射強(qiáng)行調(diào)用構(gòu)造器吧。

寫在最后

本打字員覺得,單例模式實(shí)在是所有模式中用情最專一的模式了,知道為什么嗎,因?yàn)槭褂昧怂院螅阋簧荒芏抑粫?huì)擁有一個(gè)對(duì)象了!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68753.html

相關(guān)文章

  • Android中的設(shè)計(jì)模式單例模式

    摘要:總結(jié)單例是運(yùn)用頻率很高的模式,因?yàn)榭蛻舳藳]有高并發(fā)的情況,選擇哪種方式并不會(huì)有太大的影響,出于效率考慮,推薦使用和靜態(tài)內(nèi)部類實(shí)現(xiàn)單例模式。 單例模式介紹 單例模式是應(yīng)用最廣的模式之一,也可能是很多人唯一會(huì)使用的設(shè)計(jì)模式。在應(yīng)用單例模式時(shí),單例對(duì)象的類必須保證只用一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要一個(gè)全局對(duì)象,這樣有利于我么能協(xié)調(diào)整個(gè)系統(tǒng)整體的行為。 單例模式的使用場(chǎng)景 確保某個(gè)類有且...

    yzd 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式----單例模式

    摘要:不符合設(shè)計(jì)模式中的單一職責(zé)的概念。引入代理實(shí)現(xiàn)單例模式引入代理實(shí)現(xiàn)單例模式的特點(diǎn)我們負(fù)責(zé)管理單例的邏輯移到了代理類中。的單例模式對(duì)比在以上的代碼中實(shí)現(xiàn)的單例模式都混入了傳統(tǒng)面向?qū)ο笳Z(yǔ)言的特點(diǎn)。 聲明:這個(gè)系列為閱讀《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》 ----曾探@著一書的讀書筆記 1.單例模式的特點(diǎn)和定義 保證一個(gè)類僅有一個(gè)實(shí)例,并且提供一個(gè)訪問它的全局訪問點(diǎn)。 2.傳統(tǒng)面向?qū)?..

    selfimpr 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式-單例模式(Singleton Pattern)

    摘要:如果需要防范這種攻擊,請(qǐng)修改構(gòu)造函數(shù),使其在被要求創(chuàng)建第二個(gè)實(shí)例時(shí)拋出異常。單例模式與單一職責(zé)原則有沖突。源碼地址參考文獻(xiàn)設(shè)計(jì)模式之禪 定義 單例模式是一個(gè)比較簡(jiǎn)單的模式,其定義如下: 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 或者 Ensure a class has only one instance, and provide a global point of ac...

    k00baa 評(píng)論0 收藏0
  • Java 設(shè)計(jì)模式單例模式

    摘要:在設(shè)計(jì)模式一書中,將單例模式稱作單件模式。通過關(guān)鍵字,來保證不會(huì)同時(shí)有兩個(gè)線程進(jìn)入該方法的實(shí)例對(duì)象改善多線程問題為了符合大多數(shù)程序,很明顯地,我們需要確保單例模式能在多線程的情況下正常工作。 在《Head First 設(shè)計(jì)模式》一書中,將單例模式稱作單件模式。這里為了適應(yīng)大環(huán)境,把它稱之為大家更熟悉的單例模式。 一、了解單例模式 1.1 什么是單例模式 單例模式確保一個(gè)類只有一個(gè)實(shí)例,...

    everfight 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<