久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 Ebric 2010-08-14

Singleton (單例模式)

 

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

 

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

 

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

 

代碼實現(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;

}

}

 

有無問題:碰上多線程怎么辦?涼拌了,。加鎖吧,或者,。。,。前人總結(jié)的經(jīng)驗,,有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.       早期實例化

public class Singleton

{

private static Singleton singleton = new Singleton();

private Singleton();

public static Singleton getInstance()

{

   return singleton;

}

}

 

3.       雙重檢測鎖

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;

    }
 

補充一種形式,也是線程安全的: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. }  

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多