亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡單講解在Java編程中實現(xiàn)設計模式中的單例模式結構

 更新時間:2016年04月22日 09:32:13   作者:匆忙擁擠repeat  
這篇文章主要介紹了簡單講解在Java編程中實現(xiàn)設計模式中的單例模式結構,設計模式是最基本直白簡單的一種設計模式,需要的朋友可以參考下

1. 模式介紹

模式的定義

確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。

模式的使用場景

確保某個類有且只有一個對象的場景,例如創(chuàng)建一個對象需要消耗的資源過多,如要訪問 IO 和數(shù)據(jù)庫等資源。

2. UML類圖

201642293056020.png (600×189)

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

3. 模式的簡單實現(xiàn)

public class Singleton { 
  private static Singleton intance; 
  private Singleton() {} 
   
  public static Singleton getInstance() { 
    /* 
     * 一開始多線程進來,遇到鎖,一個線程進去,是為空,new對象; 后續(xù)線程進入,不為空,不操作;最后直接返回 
     * 對象不為空,再有多個線程進入該函數(shù),不為空,不執(zhí)行加鎖操作,直接返回 
     */ 
    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() {//用到的時候 才加載, 加鎖 多線程調(diào)用,都有一個加鎖的動作 
    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.優(yōu)點與缺點

(1)優(yōu)點:

A.由于單例模式在內(nèi)存中只有一個實例,減少了內(nèi)存開支,特別是一個對象需要頻繁地創(chuàng)建、銷毀時,而且創(chuàng)建或銷毀時性能又無法優(yōu)化,單例模式的優(yōu)勢就非常明顯。
B.由于單例模式只生成一個實例,所以減少了系統(tǒng)的性能開銷,當一個對象的產(chǎn)生需要比較多的資源時,如讀取配置、產(chǎn)生其他依賴對象時,則可以通過在應用啟動時直接產(chǎn)生一個單例對象,然后用永久駐留內(nèi)存的方式來解決;
C.單例模式可以避免對資源的多重占用,例如一個寫文件動作,由于只有一個實例存在內(nèi)存中,避免對同一個資源文件的同時寫操作。
D.單例模式可以在系統(tǒng)設置全局的訪問點,優(yōu)化和共享資源訪問,例如可以設計一個單例類,負責所有數(shù)據(jù)表的映射處理。

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

相關文章

  • Java實例講解反射機制是怎么一回事

    Java實例講解反射機制是怎么一回事

    Java的反射(reflection)機制是指在程序的運行狀態(tài)中,可以構造任意一個類的對象,可以了解任意一個對象所屬的類,可以了解任意一個類的成員變量和方法,可以調(diào)用任意一個對象的屬性和方法
    2022-03-03
  • idea在運行期間,實現(xiàn)讓修改的頁面實時生效

    idea在運行期間,實現(xiàn)讓修改的頁面實時生效

    這篇文章主要介紹了idea在運行期間,實現(xiàn)讓修改的頁面實時生效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 解析ConcurrentHashMap: 預熱(內(nèi)部一些小方法分析)

    解析ConcurrentHashMap: 預熱(內(nèi)部一些小方法分析)

    ConcurrentHashMap是由Segment數(shù)組結構和HashEntry數(shù)組結構組成。Segment的結構和HashMap類似,是一種數(shù)組和鏈表結構,今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧
    2021-06-06
  • 滴滴二面之Kafka如何讀寫副本消息的

    滴滴二面之Kafka如何讀寫副本消息的

    這篇文章主要給大家介紹了關于滴滴二面之Kafka如何讀寫副本消息的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • springcloud教程之zuul路由網(wǎng)關的實現(xiàn)

    springcloud教程之zuul路由網(wǎng)關的實現(xiàn)

    這篇文章主要介紹了springcloud教程之zuul路由網(wǎng)關的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 詳解Java虛擬機(JVM)運行時

    詳解Java虛擬機(JVM)運行時

    JVM(Java虛擬機)是一個抽象的計算模型。這篇文章主要介紹了Java虛擬機(JVM)運行時的相關知識,需要的朋友可以參考下
    2018-10-10
  • JAVA中跳出當前多重嵌套循環(huán)的方法詳解

    JAVA中跳出當前多重嵌套循環(huán)的方法詳解

    今天在看面試題時,發(fā)現(xiàn)了這個問題,因為在PHP中跳出多次循環(huán)可以使用break數(shù)字來跳出多層循環(huán),但這在java中并不好使,這篇文章主要給大家介紹了關于JAVA中跳出當前多重嵌套循環(huán)的相關資料,需要的朋友可以參考下
    2022-01-01
  • Java獲取Excel中圖片所在的行和列坐標位置

    Java獲取Excel中圖片所在的行和列坐標位置

    這篇文章主要介紹了Java獲取Excel中圖片所在的行和列坐標位置,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • 詳談java中boolean和Boolean的區(qū)別

    詳談java中boolean和Boolean的區(qū)別

    下面小編就為大家?guī)硪黄斦刯ava中boolean和Boolean的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java實現(xiàn)規(guī)則幾何圖形的繪制與周長面積計算詳解

    Java實現(xiàn)規(guī)則幾何圖形的繪制與周長面積計算詳解

    隨著計算機的發(fā)展,人們對圖形的計算要求會越來越高。在各行各業(yè)中的計算人員會對圖形的計算要有便利的要求,規(guī)則幾何圖形問題求解程序應運而生!本文將用Java編寫一個程序,可以實現(xiàn)規(guī)則幾何圖形的繪制與周長面積計算,感興趣的可以了解一下
    2022-07-07

最新評論