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 老丁 閱讀(329) 評論(0)  編輯  收藏 所屬分類: 設計模式

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


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


          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          留言簿(4)

          我參與的團隊

          文章分類(50)

          文章檔案(48)

          相冊

          朋友

          搜索

          •  

          積分與排名

          • 積分 - 96927
          • 排名 - 597

          最新評論

          主站蜘蛛池模板: 囊谦县| 明光市| 龙江县| 新晃| 西和县| 白玉县| 和顺县| 同江市| 会同县| 泾川县| 吉林市| 射阳县| 靖宇县| 延寿县| 奉新县| 郓城县| 渑池县| 无棣县| 韶关市| 阳东县| 瑞金市| 青龙| 融水| 金溪县| 景宁| 襄城县| 军事| 中西区| 伊川县| 开原市| 花莲县| 武平县| 景泰县| 鹤壁市| 东方市| 伊宁县| 枣强县| 监利县| 修水县| 遂川县| 商河县|