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

打開(kāi)APP
userphoto
未登錄

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

開(kāi)通VIP
主題:DesignPattern學(xué)習(xí)-----Singleton
學(xué)習(xí)了Java兩個(gè)月。。之后兩個(gè)月學(xué)習(xí)jsp,servlet,sql,html一堆雜七雜八的東西。又花一個(gè)多月復(fù)習(xí)了一下。。。
    之后一個(gè)偶然的機(jī)會(huì),跑J道里逛了逛。。banq老大強(qiáng)調(diào)oo思想,設(shè)計(jì)模式。。于是開(kāi)始學(xué)習(xí)設(shè)計(jì)模式 :D
    剛開(kāi)始學(xué)。。好多東西都不是那么明白。。。有理解錯(cuò)誤的地方還請(qǐng)多多指教。。。

    我從Singleton開(kāi)始學(xué)。。我是這么理解的。。

    Singleton顧名思義就是只能創(chuàng)建一個(gè)實(shí)例對(duì)象。。所以不能擁有public的構(gòu)造方法。。

java 代碼

  1. public class Singleton{   
  2.        private Singleton(){}   
  3. }  

既然構(gòu)造方法是私有的,那么從外面不可能創(chuàng)建Singleton實(shí)例了。。只能從內(nèi)部創(chuàng)建。。所以需要一個(gè)方法來(lái)創(chuàng)建此實(shí)例。。此方法肯定必須是static的。。

 

java 代碼
  1. public class Singleton{      
  2.        private Singleton(){}      
  3.        
  4.        public static Singleton getInstance(){   
  5.             return [Singleton Instance];   
  6.       }   
  7. }   

getInstance方法要返回一個(gè)Singleton實(shí)例。。就要一個(gè)Singleton類型的變量來(lái)存儲(chǔ)。。聲明一個(gè)Singleton類型的屬性。。同樣需要是static 的。。靜態(tài)方法只能訪問(wèn)靜態(tài)屬性。。。

java 代碼
  1. public class Singleton{      
  2.        private Singleton(){}      
  3.        
  4.        public static Singleton getInstance(){   
  5.             single=new Singleton();   
  6.             return single;   
  7.       }   
  8.       private static Singleton single;   
  9. }   

如此就能獲得Singleton的實(shí)例了。。但是并不能確保只生成一個(gè)實(shí)例。。。需做判斷。。。

java 代碼
  1. public class Singleton{      
  2.        private Singleton(){}      
  3.        
  4.        public static Singleton getInstance(){   
  5.            if(single==null){   
  6.                 single=new Singleton();   
  7.            }   
  8.            return single;   
  9.        }   
  10.       private static Singleton single;   
  11. }   

這樣就可以了。。。

接著就牽扯到了線程問(wèn)題。。。假設(shè)有兩個(gè)線程。。thread1,thread2。。thread1運(yùn)行到第5行,然后跳到了thread2。。也運(yùn)行到第5行之后。。。此時(shí)兩線程都得到single為空。。。那么就會(huì)有兩個(gè)實(shí)例了。。。解決辦法。。同步。。

java 代碼
  1. public class Singleton{         
  2.        private Singleton(){}         
  3.           
  4.        public synchronized static Singleton getInstance(){      
  5.            if(single==null){      
  6.                 single=new Singleton();      
  7.            }      
  8.            return single;      
  9.        }      
  10.       private static Singleton single;      
  11. }      

 

還有一種方法,提前實(shí)例化。。。

java 代碼
  1. public class Singleton{         
  2.        private Singleton(){}         
  3.           
  4.        public static Singleton getInstance(){      
  5.                   return single;      
  6.        }      
  7.       private static Singleton single=new Singleton();      
  8. }      

 

此時(shí)single的static修飾符有起到另一個(gè)作用。。。因?yàn)閟tatic類型的屬性,只在類加載時(shí)初始化一次。。。以后不會(huì)再初始化了。。確保了只有一個(gè)實(shí)例。。。

最后一種方法是再head first design pattern上看到的。。double-checked locking。。。

java 代碼
  1. public class Singleton{         
  2.        private Singleton(){}         
  3.           
  4.        public static Singleton getInstance(){      
  5.            if(single==null){      
  6.                synchronized(Singleton.class){   
  7.                   if(single==null){      
  8.                      single=new Singleton();      
  9.                   }   
  10.                }   
  11.            }      
  12.            return single;      
  13.        }      
  14.       private volatile static Singleton single;      
  15. }      

 

目前對(duì)Singleton的理解就這么多。

 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JAVA實(shí)現(xiàn)單例模式的四種方法和一些特點(diǎn)
單例模式
一個(gè)單例模式的簡(jiǎn)單例子
Java設(shè)計(jì)模式-之Singleton單例模式 - 設(shè)計(jì)模式
C++ 線程安全的單例模式
設(shè)計(jì)模式之單例模式(Singleton Pattern),太簡(jiǎn)單了
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服