程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 簡略講授在Java編程中完成設計形式中的單例形式構造

簡略講授在Java編程中完成設計形式中的單例形式構造

編輯:關於JAVA

簡略講授在Java編程中完成設計形式中的單例形式構造。本站提示廣大學習愛好者:(簡略講授在Java編程中完成設計形式中的單例形式構造)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略講授在Java編程中完成設計形式中的單例形式構造正文


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.單例形式普通沒有接口,擴大很艱苦,若要擴大,除修正代碼根本上沒有第二種門路可以完成。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved