一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java設(shè)計(jì)模式-之Singleton單例模式 - 設(shè)計(jì)模式

 Ebric 2010-08-14

Singleton (單例模式)

 

Intent Ensure a class only has one instance , and provide a global point of access of it.

 

瞎談:就是保證一個(gè)類只有一個(gè)實(shí)例,并且提供一個(gè)全局可訪問的點(diǎn)。打個(gè)比方,廣州限制每戶人家養(yǎng)狗,但是只能養(yǎng)一條。一開始你沒有狗,你去買一條。若干年后,狗不行失蹤了。你為了填補(bǔ)寂寞的空虛,別人又送你一條(或者還是你自己買的)。我們不關(guān)注你的狗來源,只保證你家的狗每時(shí)每刻就一條。你為了確保以后養(yǎng)狗方便,就到保險(xiǎn)公司辦了保險(xiǎn),他們承諾,你的狗要是出現(xiàn)意外事故,他們負(fù)責(zé)陪一條給你。從此,你自由了,狗的事情交給別人了,而且別人也保證只給一條給你。

 

正經(jīng):很多時(shí)候我們要保證類的實(shí)例只有一個(gè)。我們可能在自己的代碼中判斷需要的類的實(shí)例有無(wú),無(wú)就new一個(gè)。這樣看似不錯(cuò)。問題是,你用到這個(gè)類的地方有n個(gè),這樣你就需要n個(gè)判斷。為什么不把這個(gè)職責(zé)交給類本身呢?然后讓類提供一個(gè)接口訪問

 

代碼實(shí)現(xiàn):

 

public class Singleton

{

private static Singleton singleton=null;

private Singleton()

{}

public static Singleton instance()

{

   if(singleton==null)

      singleton = new Singleton();

   return singleton

      return singleton;

}

}

 

有無(wú)問題:碰上多線程怎么辦?涼拌了。加鎖吧,或者。。。前人總結(jié)的經(jīng)驗(yàn),有3中方法

1.       直接加鎖

public class Singleton

{

private static Singleton singleton=null;

private Singleton()

{}

public static synchronized Singleton instance()

{

   if(singleton==null)

      singleton = new Singleton();

   return singleton

      return singleton;

}

}

2.       早期實(shí)例化

public class Singleton

{

private static Singleton singleton = new Singleton();

private Singleton();

public static Singleton getInstance()

{

   return singleton;

}

}

 

3.       雙重檢測(cè)鎖

public class Singleton

{

   private volatile static Singleton singleton=null;

   private Singleton(){}

   public static Singleton getInstance()

   {

              if(singleton==null)

        {    synchronized(Singleton.class)

                     {

                           singleton=new Singleton();

                     }

         }

         return singleton;

    }
 

補(bǔ)充一種形式,也是線程安全的:The solution of Bill Pugh

 Java代碼

  1. public class Singleton {   
  2.   // Private constructor prevents instantiation from other classes   
  3.   private Singleton() {}   
  4.   
  5.   /**  
  6.    * SingletonHolder is loaded on the first execution of Singleton.getInstance()   
  7.    * or the first access to SingletonHolder.INSTANCE, not before.  
  8.    */  
  9.   private static class SingletonHolder {    
  10.     private static final Singleton INSTANCE = new Singleton();   
  11.   }   
  12.   
  13.   public static Singleton getInstance() {   
  14.     return SingletonHolder.INSTANCE;   
  15.   }   
  16. }  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    2019年国产最新视频| 国产三级黄片在线免费看| 儿媳妇的诱惑中文字幕| 精品国产91亚洲一区二区三区 | 中文字幕亚洲精品人妻| 国产午夜在线精品视频| 国产精品尹人香蕉综合网| 熟女中文字幕一区二区三区| 色丁香之五月婷婷开心| 日韩精品视频高清在线观看| 成人精品欧美一级乱黄| 中文字幕亚洲精品人妻| 国产精品视频久久一区| 久久精视频免费视频观看| 一区二区在线激情视频| 亚洲精品偷拍一区二区三区| 午夜资源在线观看免费高清| 成人精品一区二区三区综合| 少妇被粗大进猛进出处故事| 国产精品一级香蕉一区| 日韩精品你懂的在线观看| 久久偷拍视频免费观看| 青青操成人免费在线视频| 超碰在线播放国产精品| 国产一级性生活录像片| 国产男女激情在线视频| 欧美日韩精品久久亚洲区熟妇人| 国产欧美一区二区另类精品| 久热青青草视频在线观看| 大尺度激情福利视频在线观看| 午夜色午夜视频之日本| 五月激情婷婷丁香六月网| 视频一区日韩经典中文字幕| 91精品蜜臀一区二区三区| 亚洲淫片一区二区三区| 日韩免费av一区二区三区| 久久精品国产熟女精品| 国产精品亚洲综合色区韩国| 国产成人午夜在线视频| 久久热九九这里只有精品| 熟妇久久人妻中文字幕|