国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

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í)例有無,無就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;

}

}

 

有無問題:碰上多線程怎么辦?涼拌了。加鎖吧,或者。。。前人總結(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.       雙重檢測鎖

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   
  •   private Singleton() {}   
  •   
  •   /**  
  •    * SingletonHolder is loaded on the first execution of Singleton.getInstance()   
  •    * or the first access to SingletonHolder.INSTANCE, not before.  
  •    */  
  •   private static class SingletonHolder {    
  •     private static final Singleton INSTANCE = new Singleton();   
  •   }   
  •   
  •   public static Singleton getInstance() {   
  •     return SingletonHolder.INSTANCE;   
  •   }   
  • }  
  • 本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
    打開APP,閱讀全文并永久保存 查看更多類似文章
    猜你喜歡
    類似文章
    java幾種方式實(shí)現(xiàn)單例設(shè)計(jì)模式
    c#單態(tài)設(shè)計(jì)模式
    怎樣實(shí)現(xiàn)線程安全的延遲初始化單例模式 ??
    單例模式的七種寫法
    GoF設(shè)計(jì)模式之五 Singleton- -
    《Head First設(shè)計(jì)模式》閱讀筆記.第五章
    更多類似文章 >>
    生活服務(wù)
    分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
    綁定賬號成功
    后續(xù)可登錄賬號暢享VIP特權(quán)!
    如果VIP功能使用有故障,
    可點(diǎn)擊這里聯(lián)系客服!

    聯(lián)系客服