設(shè)計(jì)模式:?jiǎn)卫J?/h1>

單例模式:

保證一個(gè)類只有一個(gè)實(shí)例稻励,并且提供一個(gè)全局訪問(wèn)點(diǎn)。

使用場(chǎng)景:

單例模式只允許創(chuàng)建一個(gè)對(duì)象,因此節(jié)省內(nèi)存粤攒,加快對(duì)象訪問(wèn)速度,因此在對(duì)象需要被公用的情況下使用適合使用

單例優(yōu)點(diǎn):

  • 只有一個(gè)實(shí)例囱持,節(jié)約內(nèi)存
  • 只創(chuàng)建一次夯接,加快訪問(wèn)速度。
  • 提供了對(duì)唯一實(shí)例的受控訪問(wèn)纷妆。
  • 避免對(duì)共享資源的多重占用盔几。

缺點(diǎn):

  • 單利模式中沒(méi)有抽象層,因此單例類的擴(kuò)展有很大的困難掩幢。
  • 單例類的職責(zé)過(guò)重逊拍,在一定程度上違背了“單一職責(zé)原則”。

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

  • 餓漢模式:
    在類加載時(shí)就完成了初始化粒蜈,所以類加載較慢顺献,但獲取對(duì)象的速度快
package headFirst.Singleton;

/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:04
 */
public class Hungry {
    private static Hungry instance = new Hungry();
     private Hungry (){
     }
     public static Hungry getInstance() {
     return instance;
     }
}

  • 懶漢模式(線程不安全)
    在用戶第一次調(diào)用時(shí)初始化,線程不安全
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:18
 */
public class Lazy {
      private static Lazy instance;  
      private Lazy (){
      }   
      public static Lazy getInstance() {  
      if (instance == null) {  
          instance = new Lazy ();  
      }  
      return instance;  
      }  
 
}
  • 懶漢模式(線程安全)
    加鎖保證線程安全
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:21
 */
public class LazySafe {
       private static LazySafe instance;
      private LazySafe (){
      }
      public static synchronized LazySafe getInstance() {
      if (instance == null) {
          instance = new LazySafe();
      }
      return instance;
      }
}
  • (懶漢)雙重檢查模式
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:24
 */
public class DCL {
        private volatile static DCL instance;  
      private DCL (){
      }   
      public static DCL getInstance() {  
      if (instance== null) {  
          synchronized (DCL.class) {  
          if (instance== null) {  
              instance= new DCL();  
          }  
         }  
     }  
     return instance;  
     }
}
  • (懶漢)靜態(tài)內(nèi)部類單例模式
    第一次加載Singleton類時(shí)并不會(huì)初始化sInstance,只有第一次調(diào)用getInstance方法時(shí)虛擬機(jī)加載SingletonHolder 并初始化sInstance
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:26
 */
public class Singleton {
        private Singleton(){
    }
      public static Singleton getInstance(){  
        return SingletonHolder.sInstance;  
    }  
    private static class SingletonHolder {  
        private static final Singleton sInstance = new Singleton();  
    }
}
  • 枚舉
    線程安全枯怖,簡(jiǎn)單注整,但是可讀性不強(qiáng),建議加注釋
/**
 * @author zhaokai008@ke.com
 * @date 2019-07-21 00:28
 */
public enum SingletonEnum {
    INSTANCE;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肿轨,隨后出現(xiàn)的幾起案子寿冕,更是在濱河造成了極大的恐慌,老刑警劉巖椒袍,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驼唱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡驹暑,警方通過(guò)查閱死者的電腦和手機(jī)玫恳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)优俘,“玉大人京办,你說(shuō)我怎么就攤上這事》溃” “怎么了惭婿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)叶雹。 經(jīng)常有香客問(wèn)我财饥,道長(zhǎng),這世上最難降的妖魔是什么折晦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任钥星,我火速辦了婚禮,結(jié)果婚禮上筋遭,老公的妹妹穿的比我還像新娘打颤。我一直安慰自己,他們只是感情好漓滔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布编饺。 她就那樣靜靜地躺著,像睡著了一般响驴。 火紅的嫁衣襯著肌膚如雪透且。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天豁鲤,我揣著相機(jī)與錄音秽誊,去河邊找鬼。 笑死琳骡,一個(gè)胖子當(dāng)著我的面吹牛锅论,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播楣号,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼最易,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怒坯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起藻懒,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剔猿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嬉荆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體归敬,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年鄙早,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汪茧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡限番,死狀恐怖陆爽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扳缕,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布别威,位于F島的核電站躯舔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏省古。R本人自食惡果不足惜粥庄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豺妓。 院中可真熱鬧惜互,春花似錦、人聲如沸琳拭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)白嘁。三九已至坑鱼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間絮缅,已是汗流浹背鲁沥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耕魄,地道東北人画恰。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吸奴,于是被迫代替她去往敵國(guó)和親允扇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缠局,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 單例模式 介紹 為了節(jié)約系統(tǒng)資源,有時(shí)需要確保系統(tǒng)中某個(gè)類只有唯一一個(gè)實(shí)例蔼两,當(dāng)這個(gè)唯一實(shí)例創(chuàng)建成功之后甩鳄,我們無(wú)法再...
    666真666閱讀 343評(píng)論 0 6
  • 文章概要 1、什么是單例2额划、為什么需要單例3妙啃、單例的優(yōu)點(diǎn)和缺點(diǎn)4、單例的寫(xiě)法和比較5俊戳、序列化破壞單例6揖赴、反射破壞單...
    張先森丶閱讀 496評(píng)論 0 1
  • 前言 單例模式是一個(gè)開(kāi)發(fā)者耳熟能詳?shù)脑O(shè)計(jì)模式燥滑,在各種書(shū)籍或者文章都會(huì)見(jiàn)到這個(gè)名字,它的應(yīng)用場(chǎng)景是:當(dāng)一個(gè)對(duì)象的創(chuàng)建...
    丶藍(lán)天白云夢(mèng)閱讀 514評(píng)論 0 1
  • 設(shè)計(jì)模式-單例模式 單例模式在網(wǎng)上已經(jīng)是被寫(xiě)爛的一種設(shè)計(jì)模式了阿逃,筆者也看了不少的有關(guān)單例模式的文章铭拧,但是在實(shí)際生產(chǎn)...
    醒著的碼者閱讀 693評(píng)論 1 2
  • 寫(xiě)在前面# 其實(shí)我也不知道想說(shuō)什么,來(lái)簡(jiǎn)書(shū)已經(jīng)足足15天了恃锉,每天都在通過(guò)文字總結(jié)和分享自己的所學(xué)知識(shí)搀菩,寫(xiě)技術(shù)文章好...
    孑然自安閱讀 1,984評(píng)論 1 9