欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu)

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

1. 模式介紹

模式的定義

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

模式的使用場(chǎng)景

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

2. UML類圖

201642293056020.png (600×189)

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

3. 模式的簡(jiǎn)單實(shí)現(xiàn)

public class Singleton { 
  private static Singleton intance; 
  private Singleton() {} 
   
  public static Singleton getInstance() { 
    /* 
     * 一開(kāi)始多線程進(jìn)來(lái),遇到鎖,一個(gè)線程進(jìn)去,是為空,new對(duì)象; 后續(xù)線程進(jìn)入,不為空,不操作;最后直接返回 
     * 對(duì)象不為空,再有多個(gè)線程進(jìn)入該函數(shù),不為空,不執(zhí)行加鎖操作,直接返回 
     */ 
    if (intance == null) { 
      synchronized (Singleton.class) { 
        if (intance == null) { 
          intance = new Singleton(); 
        } 
      } 
    } 
    return intance; 
  } 
} 
 
class Singleton1 {// 懶漢式  
  private static Singleton1 intance = new Singleton1();//懶的,程序運(yùn)行的時(shí)候就加載出來(lái)了 
  private Singleton1() {} 
   
  public static Singleton1 getInstance() { 
    return intance; 
  } 
} 
 
class Singleton2 {// 餓漢式 
  private static Singleton2 intance; 
  private Singleton2() {} 
   
  public static Singleton2 getInstance() {//用到的時(shí)候 才加載 
    if (intance == null) { 
      intance = new Singleton2(); 
    } 
    return intance; 
  } 
} 
 
class Singleton3 {// 餓漢式 線程安全 
  private static Singleton3 intance; 
  private Singleton3() {} 
   
  public synchronized static Singleton3 getInstance() {//用到的時(shí)候 才加載, 加鎖 多線程調(diào)用,都有一個(gè)加鎖的動(dòng)作 
    if (intance == null) { 
      intance = new Singleton3(); 
    } 
    return intance; 
  } 
} 
 
class Singleton4 {// 餓漢式 線程安全 
  private static Singleton4 intance; 
  private Singleton4() {} 
   
  public static Singleton4 getInstance() {//用到的時(shí)候 才加載 
    synchronized (Singleton4.class) {// 加鎖 效率跟3差不多 
      if (intance == null) { 
        intance = new Singleton4(); 
      } 
    } 
    return intance; 
  } 
} 

4.優(yōu)點(diǎn)與缺點(diǎn)

(1)優(yōu)點(diǎn):

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

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

相關(guān)文章

  • Java實(shí)例講解反射機(jī)制是怎么一回事

    Java實(shí)例講解反射機(jī)制是怎么一回事

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

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

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

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

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

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

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

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

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

    詳解Java虛擬機(jī)(JVM)運(yùn)行時(shí)

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

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

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

    Java獲取Excel中圖片所在的行和列坐標(biāo)位置

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

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

    下面小編就為大家?guī)?lái)一篇詳談java中boolean和Boolean的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Java實(shí)現(xiàn)規(guī)則幾何圖形的繪制與周長(zhǎng)面積計(jì)算詳解

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

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

最新評(píng)論