laoding
          本來我以為,隱身了別人就找不到我,沒有用的,像我這樣拉風的男人,無論走到哪里,都像在黑暗中的螢火蟲一樣,那樣的鮮明,那樣的出眾。我那憂郁的眼神,稀疏的胡茬,那微微隆起的將軍肚和親切的笑容......都深深吸引了眾人......
          posts - 0,  comments - 37,  trackbacks - 0
          Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。

          在很多操作中,比如建立目錄 數據庫連接都需要這樣的單線程操作。

          還有, singleton能夠被狀態化; 這樣,多個單態類在一起就可以作為一個狀態倉庫一樣向外提供服務,比如,你要論壇中的帖子計數器,每次瀏覽一次需要計數,單態類能否保持住這個計數,并且能synchronize的安全自動加1,如果你要把這個數字永久保存到數據庫,你可以在不修改單態接口的情況下方便的做到。

          另外方面,Singleton也能夠被無狀態化。提供工具性質的功能,

          Singleton模式就為我們提供了這樣實現的可能。使用Singleton的好處還在于可以節省內存,因為它限制了實例的個數,有利于Java垃圾回收(garbage collection)。

          我們常常看到工廠模式中類裝入器(class loader)中也用Singleton模式實現的,因為被裝入的類實際也屬于資源。

          下面來看看例子

          public class Singleton {
              
              
          private static Singleton singleton = new Singleton();
              
              
          private Singleton() {
                  System.out.println(
          "已產生對象實例。");
              }
              
              
          public static Singleton getInstance() {
                  
          return singleton;
              }

          測試類
          public class Main {

              
          /**
               * 
          @param args
               
          */
              
          public static void main(String[] args) {
                  
          // TODO Auto-generated method stub
                  System.out.println("Start.");
                  System.out.println(
          "start obj1");
                  Singleton obj1 
          = Singleton.getInstance();
                  System.out.println(
          "end obj1");
                  
                  System.out.println(
          "start obj2");
                  Singleton obj2 
          = Singleton.getInstance();
                  System.out.println(
          "end obj2");
                  
                  
          if(obj1 == obj2) {
                      System.out.println(
          "對象是同一個對象");
                  } 
          else {
                      System.out.println(
          "對象不是同一個對象");
                  }
                  
                  System.out.println(
          "End.");

              }

          }


          運行測試類,看到控制臺的輸出如下:
          Start....
          start obj1
          已產生對象實例。
          end obj1
          start obj2
          end obj2
          對象是同一個對象
          End....


          我們從上面開始看,在start obj1和end obj1直接輸出了“已產生對象實例”說明有對象產生了,而start obj2和end obj2之間卻沒有打印,為什么呢?因為取得obj2對象的時候并沒有再創建新的對象,而是去拿到跟obj1同一個對象,在Singleton類中已經創建了這個對象,并且是static的,這樣也就可以解釋后面的輸出“對象是同一個對象”這句話了。
          posted on 2009-10-14 15:13 老丁 閱讀(320) 評論(0)  編輯  收藏 所屬分類: 設計模式

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          本博客主為學習和復習之用,無關其他,想罵人的繞道
          Email:dkm123456@126.com
          大家一起交流進步
          QQ:283582761


          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          留言簿(4)

          我參與的團隊

          文章分類(50)

          文章檔案(48)

          相冊

          朋友

          搜索

          •  

          積分與排名

          • 積分 - 96559
          • 排名 - 600

          最新評論

          主站蜘蛛池模板: 金溪县| 竹溪县| 大邑县| 微山县| 宜兰县| 白朗县| 大足县| 水富县| 山东省| 开鲁县| 康平县| 华蓥市| 建始县| 张家界市| 忻城县| 新乡县| 永吉县| 定陶县| 明水县| 岳西县| 保定市| 永川市| 远安县| 志丹县| 洪洞县| 崇文区| 玉环县| 宿州市| 克什克腾旗| 青冈县| 宾川县| 新郑市| 应城市| 汉中市| 唐山市| 集安市| 保康县| 桦南县| 万源市| 鄢陵县| 大荔县|