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)

          相冊

          朋友

          搜索

          •  

          積分與排名

          • 積分 - 96532
          • 排名 - 600

          最新評論

          主站蜘蛛池模板: 台东县| 长葛市| 大埔县| 阿拉善左旗| 盘山县| 上饶市| 崇义县| 枣庄市| 永福县| 高密市| 台东县| 噶尔县| 齐河县| 隆林| 祁东县| 商都县| 通许县| 麟游县| 肥城市| 隆子县| 永丰县| 册亨县| 游戏| 上高县| 名山县| 禄丰县| 临汾市| 莱阳市| 安远县| 漳平市| 沭阳县| 泰安市| 崇明县| 蒙城县| 桦川县| 方山县| 岑巩县| 禹州市| 多伦县| 博客| 巩义市|