簡單講解在Java編程中實現設計模式中的單例模式結構_java

來源:互聯網
上載者:User

1. 模式介紹

模式的定義

確保某一個類只有一個執行個體,而且自行執行個體化並向整個系統提供這個執行個體。

模式的使用情境

確保某個類有且只有一個對象的情境,例如建立一個對象需要消耗的資源過多,如要訪問 IO 和資料庫等資源。

2. UML類圖

角色介紹:
(1)Client : 高層用戶端。
(2)Singleton : 單例類。

3. 模式的簡單實現

public class Singleton {   private static Singleton intance;   private Singleton() {}      public static Singleton getInstance() {     /*      * 一開始多線程進來,遇到鎖,一個線程進去,是為空白,new對象; 後續線程進入,不為空白,不操作;最後直接返回      * 對象不為空白,再有多個線程進入該函數,不為空白,不執行加鎖操作,直接返回      */     if (intance == null) {       synchronized (Singleton.class) {         if (intance == null) {           intance = new Singleton();         }       }     }     return intance;   } }  class Singleton1 {// 懶漢式    private static Singleton1 intance = new Singleton1();//懶的,程式啟動並執行時候就載入出來了   private Singleton1() {}      public static Singleton1 getInstance() {     return intance;   } }  class Singleton2 {// 餓漢式   private static Singleton2 intance;   private Singleton2() {}      public static Singleton2 getInstance() {//用到的時候 才載入     if (intance == null) {       intance = new Singleton2();     }     return intance;   } }  class Singleton3 {// 餓漢式 安全執行緒   private static Singleton3 intance;   private Singleton3() {}      public synchronized static Singleton3 getInstance() {//用到的時候 才載入, 加鎖 多線程調用,都有一個加鎖的動作     if (intance == null) {       intance = new Singleton3();     }     return intance;   } }  class Singleton4 {// 餓漢式 安全執行緒   private static Singleton4 intance;   private Singleton4() {}      public static Singleton4 getInstance() {//用到的時候 才載入     synchronized (Singleton4.class) {// 加鎖 效率跟3差不多       if (intance == null) {         intance = new Singleton4();       }     }     return intance;   } } 

4.優點與缺點

(1)優點:

A.由於單例模式在記憶體中只有一個執行個體,減少了記憶體開支,特別是一個對象需要頻繁地建立、銷毀時,而且建立或銷毀時效能又無法最佳化,單例模式的優勢就非常明顯。
B.由於單例模式只產生一個執行個體,所以減少了系統的效能開銷,當一個對象的產生需要比較多的資源時,如讀取配置、產生其他依賴對象時,則可以通過在應用啟動時直接產生一個單例對象,然後用永久駐留記憶體的方式來解決;
C.單例模式可以避免對資源的多重佔用,例如一個寫檔案動作,由於只有一個執行個體存在記憶體中,避免對同一個資源檔的同時寫操作。
D.單例模式可以在系統設定全域的訪問點,最佳化和共用資源訪問,例如可以設計一個單例類,負責所有資料表的映射處理。

(2)缺點
A.單例模式一般沒有介面,擴充很困難,若要擴充,除了修改代碼基本上沒有第二種途徑可以實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.