最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java單例模式實(shí)現(xiàn)靜態(tài)內(nèi)部類方法示例

 更新時(shí)間:2017年09月26日 09:05:23   作者:ZzzCrazyPig  
這篇文章主要介紹了Java單例模式實(shí)現(xiàn)靜態(tài)內(nèi)部類方法示例,涉及構(gòu)造函數(shù)私有化等相關(guān)內(nèi)容,需要的朋友可以了解下。

Singleton是眾多設(shè)計(jì)模式中最容易理解的一種,也是眾多設(shè)計(jì)模式中較為重要的一種設(shè)計(jì)模式。接下來我們看看具體介紹。

Singleton模式實(shí)現(xiàn)的重點(diǎn)在于將構(gòu)造函數(shù)私有化(private),并通過提供靜態(tài)公有函數(shù)(public synchronized static xxx getInstance)來獲取定義在類中的靜態(tài)私有成員(private static xxx instance),通過一個(gè)簡單的判斷靜態(tài)實(shí)例是否為空來控制這個(gè)類只能夠new一次,即控制了一個(gè)類只能有單個(gè)實(shí)例,一般的實(shí)現(xiàn)如下代碼所示:

package com.study.dp.singleton; 
/** 
 * 傳統(tǒng)方式實(shí)現(xiàn)單例模式 
 * @author CrazyPig 
 * 
 */ 
public class TraditionalSingletion { 
  // 單實(shí)例 
  private static TraditionalSingletion instance; 
   
  // 不讓new 
  private TraditionalSingletion() { 
    System.out.println("private TraditionalSingletion()"); 
  }    
  public synchronized static TraditionalSingletion getInstance() { 
    System.out.println("TraditionalSingletion getInstance()"); 
    if(instance == null) { 
      System.out.println("instance = new TraditionalSingletion()"); 
      instance = new TraditionalSingletion(); 
    } 
    return instance; 
  }    
  public static void main(String[] args) { 
    TraditionalSingletion instance = TraditionalSingletion.getInstance(); 
    System.out.println("========================================"); 
    TraditionalSingletion instance01 = TraditionalSingletion.getInstance(); 
    System.out.println("========================================"); 
    TraditionalSingletion instance02 = TraditionalSingletion.getInstance(); 
  } 
}

今天偶然在一篇文章中看到另外一種巧妙的做法,通過將這個(gè)單實(shí)例的引用變量定義在靜態(tài)內(nèi)部類中,來實(shí)現(xiàn)單例,這樣可以做到不用if條件進(jìn)行判斷,并且是多線程安全的(由jvm保證)。這個(gè)特殊的做法如下所示:

package com.study.dp.singleton;  
/** 
 * 靜態(tài)內(nèi)部類實(shí)現(xiàn)單例模式 
 * @author CrazyPig 
 * 
 */ 
public class SpecialSingleton {    
  // 靜態(tài)內(nèi)部類 
  private static class NestClass { 
    private static SpecialSingleton instance; 
    static { 
      System.out.println("instance = new SingletonTest()"); 
      instance = new SpecialSingleton(); 
    } 
  }    
  // 不能直接new 
  private SpecialSingleton() { 
    System.out.println("private SingletonTest()"); 
  } 
  public static SpecialSingleton getInstance() { 
    System.out.println("SingletonTest getInstance()"); 
    return NestClass.instance; 
  } 
  public static void main(String[] args) { 
    SpecialSingleton instance = SpecialSingleton.getInstance(); 
    System.out.println("========================================"); 
    SpecialSingleton instance01 = SpecialSingleton.getInstance(); 
    System.out.println("========================================"); 
    SpecialSingleton instance02 = SpecialSingleton.getInstance(); 
  } 
} 

當(dāng)?shù)谝淮我胓etInstance()方法的時(shí)候,訪問靜態(tài)內(nèi)部類中的靜態(tài)成員變量,此時(shí)該內(nèi)部類需要調(diào)用static代碼塊(因?yàn)槭状卧L問該類)。而后再次訪問getInstance()方法會(huì)直接返回instace引用。這種做法相對(duì)于傳統(tǒng)做法更加巧妙。

總結(jié)

以上就是本文關(guān)于Java單例模式實(shí)現(xiàn)靜態(tài)內(nèi)部類方法示例的全部內(nèi)容,希望對(duì)大家有所幫助,感興趣的朋友可以參閱本站其他專題。

相關(guān)文章

  • JavaWeb入門:ServletContext詳解和應(yīng)用

    JavaWeb入門:ServletContext詳解和應(yīng)用

    這篇文章主要介紹了Java ServletContext對(duì)象用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 如何在IDEA中查看依賴關(guān)系的方法步驟

    如何在IDEA中查看依賴關(guān)系的方法步驟

    這篇文章主要介紹了如何在IDEA中查看依賴關(guān)系的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java異常處理機(jī)制try catch流程詳解

    Java異常處理機(jī)制try catch流程詳解

    這篇文章主要介紹了Java異常處理機(jī)制try catch流程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java如何獲取對(duì)象屬性及對(duì)應(yīng)值

    Java如何獲取對(duì)象屬性及對(duì)應(yīng)值

    這篇文章主要介紹了Java如何獲取對(duì)象屬性及對(duì)應(yīng)值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 校驗(yàn)非空的注解@NotNull如何取得自定義的message

    校驗(yàn)非空的注解@NotNull如何取得自定義的message

    這篇文章主要介紹了校驗(yàn)非空的注解@NotNull如何取得自定義的message,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java創(chuàng)建二維碼并賦予url鏈接的功能實(shí)現(xiàn)

    java創(chuàng)建二維碼并賦予url鏈接的功能實(shí)現(xiàn)

    這篇文章給大家分享java創(chuàng)建二維碼并賦予url鏈接的功能實(shí)現(xiàn),需要獲取要賦值給二維碼的鏈接后綴,通過設(shè)置二維碼的訪問路徑等一系列操作,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧
    2021-06-06
  • Mybatis之a(chǎn)ssociation和collection用法

    Mybatis之a(chǎn)ssociation和collection用法

    這篇文章主要介紹了Mybatis之a(chǎn)ssociation和collection用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Maven默認(rèn)使用JDK1.5的問題及解決方案

    Maven默認(rèn)使用JDK1.5的問題及解決方案

    這篇文章主要介紹了Maven默認(rèn)使用JDK1.5的問題及解決方案,本文給大家分享兩種方式,通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名),這篇文章主要介紹了mybatis-xml映射文件及mybatis動(dòng)態(tài)sql的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 使用Zookeeper實(shí)現(xiàn)分布式鎖

    使用Zookeeper實(shí)現(xiàn)分布式鎖

    這篇文章主要介紹了使用Zookeeper實(shí)現(xiàn)分布式鎖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評(píng)論

麻城市| 廊坊市| 南平市| 沅江市| 阜新| 浑源县| 宝清县| 留坝县| 桂阳县| 福鼎市| 三门县| 新津县| 武胜县| 黄龙县| 自治县| 阿瓦提县| 赣榆县| 广德县| 舟山市| 晋江市| 岳阳市| 金乡县| 沂水县| 宜阳县| 慈利县| 永定县| 澳门| 连城县| 伊金霍洛旗| 崇仁县| 射洪县| 晋江市| 清水县| 天祝| 浮梁县| 彰武县| 罗江县| 谷城县| 浪卡子县| 崇仁县| 田林县|