成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

單例模式

gotham / 2853人閱讀

摘要:建議這個(gè)版本中的不要使用這個(gè)設(shè)計(jì)模式。相比于其他設(shè)計(jì)模式單例模式是比較容易理解的,寫法相比其他模式來說,也比較簡(jiǎn)單。

單例模式的應(yīng)用場(chǎng)景:

注冊(cè)表對(duì)象

日志對(duì)象

為什么要使用單例:

防止資源使用過度

程序運(yùn)行結(jié)果出現(xiàn)不一致情況

為什么不使用全局變量,非要用單例模式呢:

全局靜態(tài)變量,在一開始程序就會(huì)進(jìn)行創(chuàng)建,如果這個(gè)變量使用不到,消耗資源也太大,就會(huì)造成浪費(fèi)

單例模式能保證返回唯一的實(shí)例,并且在使用的時(shí)候才創(chuàng)建

什么是單例模式:

確保一個(gè)類只有一個(gè)實(shí)例,并且提供一個(gè)全局的訪問點(diǎn)

錯(cuò)誤寫法:
package com.singlePattern.obj;

/**
 * @program: designPattern
 * @description: 單例對(duì)象
 * @author: Mr.Yang
 * @create: 2018-11-24 21:00
 **/
public class Singleton {
    private static Singleton singleton;

    private Singleton(){}

    public static synchronized Singleton getInstance(){
        if(singleton==null){
            singleton=new Singleton();
        }
        return singleton;
    }
}
錯(cuò)誤解析:

其實(shí)這樣寫是可以的,但是會(huì)影響效率。當(dāng)一個(gè)實(shí)例創(chuàng)建之后,再次進(jìn)行這個(gè)方法的調(diào)用,會(huì)進(jìn)行加鎖,然后返回這個(gè)實(shí)例

優(yōu)化處理-1
利用JVM在加載這個(gè)類的時(shí)候,保證先創(chuàng)建這個(gè)對(duì)象的實(shí)例,當(dāng)調(diào)用方法的時(shí)候,直接返回。
package com.singlePattern.obj;

/**
 * @program: designPattern
 * @description: 單例對(duì)象
 * @author: Mr.Yang
 * @create: 2018-11-24 21:00
 **/
public class Singleton {
    private static Singleton singleton = new Singleton();

    private Singleton(){}

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

優(yōu)化處理-2

雙重檢查加鎖
package com.singlePattern.obj;

/**
 * @program: designPattern
 * @description: 單例對(duì)象
 * @author: Mr.Yang
 * @create: 2018-11-24 21:00
 **/
public class Singleton {
   /* private static Singleton singleton = new Singleton();

    private Singleton(){}

    public static  Singleton getInstance(){
        return singleton;
    }*/

   //volatile關(guān)鍵詞保證,當(dāng)singleton變量被初始化成對(duì)象實(shí)例時(shí),多個(gè)線程正確的處理該變量
   private volatile static Singleton singleton;

   private Singleton(){}

    /**
     * 這種方式保證只有第一次創(chuàng)建實(shí)例的時(shí)候,才能徹底走完這個(gè)方法
     * 雙重檢查加鎖在1.4或者更早的jdva版本中,jvm對(duì)于volatile關(guān)鍵字的實(shí)現(xiàn)會(huì)導(dǎo)致雙重檢查加鎖
     * 的實(shí)現(xiàn)。建議這個(gè)版本中的不要使用這個(gè)設(shè)計(jì)模式。
     * @return
     */
   public static Singleton getInstance(){
       if(singleton==null){
           synchronized (Singleton.class){
               if(singleton==null){
                   singleton=new Singleton();
               }
           }
       }
       return singleton;
   }
}
相比于其他設(shè)計(jì)模式:

單例模式是比較容易理解的,寫法相比其他模式來說,也比較簡(jiǎn)單。

關(guān)注JAVA知識(shí)分享與總結(jié)公眾號(hào),獲取更多!

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72453.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言的特點(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元查看
<