<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 68, comments - 19, trackbacks - 0, articles - 1

    java模式之單例模式

    Posted on 2010-10-04 11:33 viery 閱讀(181) 評論(0)  編輯  收藏 所屬分類: JavaSE

    java模式之單例模式:
              單例模式確保一個類只有一個實例,自行提供這個實例并向整個系統提供這個實例。
     特點:
           1,一個類只能有一個實例
           2,自己創建這個實例
           3,整個系統都要使用這個實例
        例: 在下面的對象圖中,有一個"單例對象",而"客戶甲"、"客戶乙" 和"客戶丙"是單例對象的三個客戶對象。可以看到,所有的客戶對象共享一個單例對象。而且從單例對象到自身的連接線可以看出,單例對象持有對自己的引用。

        Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。在很多操作中,比如建立目錄 數據庫連接都需要這樣的單線程操作。一些資源管理器常常設計成單例模式。
        外部資源:譬如每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干個通信端口,系統應當集中管理這些通信端口,以避免一個通信端口被兩個請求同時調用。內部資源,譬如,大多數的軟件都有一個(甚至多個)屬性文件存放系統配置。這樣的系統應當由一個對象來管理這些屬性文件。

    一個例子:Windows 回收站。
    在整個視窗系統中,回收站只能有一個實例,整個系統都使用這個惟一的實例,而且回收站自行提供自己的實例。因此,回收站是單例模式的應用。

    兩種形式:
    1,餓漢式單例類
    public class Singleton {

      private Singleton(){}

      //在自己內部定義自己一個實例,是不是很奇怪?
      //注意這是private 只供內部調用

      private static Singleton instance = new Singleton();

      //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問  
      public static Singleton getInstance() {
        return instance;   
       }
    }

    2,懶漢式單例類

    public class Singleton {

      private static Singleton instance = null;

      public static synchronized Singleton getInstance() {

      //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次   

     
      //使用時生成實例,提高了效率!
      if (instance==null)
        instance=new Singleton();
      return instance;   }

    }


    第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,以后就不用再生成了。


    注意到lazy initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那么使用getInstance()是有可能得到多個Singleton實例。
    一般來說第一種比較安全。

     

    在這個類中要有一個靜態主法。來得到這個實例的比如下面代碼:

    private DBManager(){}

          

    //    public static DBManager getInstence(){

    //           if(manager==null)

    //                  manager = new DBManager();

    //           return manager;

    //    }

          

           public static Connection getConnection() {

     

                  Connection conn = null;

     

                  try {

                         conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

                  } catch (SQLException e) {

                         // TODO 自動生成 catch

                         e.printStackTrace();

                  }

     

                  return conn;

           }

     

    主站蜘蛛池模板: 免费黄色小视频网站| 午夜毛片不卡高清免费| 亚洲综合精品香蕉久久网| 国产精品hd免费观看| 在线亚洲精品自拍| 黄色视频在线免费观看| 亚洲熟妇无码AV在线播放| 中文字幕av无码不卡免费| 国产亚洲综合色就色| 日本在线看片免费人成视频1000| 亚洲第一成年男人的天堂| 欧洲一级毛片免费| 亚洲中文字幕一二三四区苍井空| 成人黄18免费视频| 亚洲AV性色在线观看| 亚洲成?Ⅴ人在线观看无码| sss在线观看免费高清| 亚洲αv久久久噜噜噜噜噜| 99爱在线观看免费完整版| 亚洲国产综合人成综合网站00| 波多野结衣免费在线| 亚洲欧美成人av在线观看| 成人伊人亚洲人综合网站222| 久久一区二区免费播放| 亚洲综合国产精品| 午夜视频免费成人| 久青草视频97国内免费影视| 亚洲一区免费观看| 日本黄色免费观看| 永久在线观看免费视频| 亚洲www77777| 亚洲中文字幕久久精品无码喷水| 久久九九AV免费精品| 亚洲国产精华液2020| 亚洲人成图片小说网站| 嫖丰满老熟妇AAAA片免费看| 成人特级毛片69免费观看| 亚洲视频在线观看网址| 免费吃奶摸下激烈视频| 国产精品成人免费视频网站京东| 日韩成人精品日本亚洲|