亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java 單例模式的實例詳解

2024-07-13 10:12:56
字體:
來源:轉載
供稿:網友

java/174849.html">javascript/59178.html">java 單例模式的實例詳解

概念:   

java中單例模式是一種常見的設計模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種。   

單例模式有一下特點:

  1、單例類只能有一個實例。
  2、單例類必須自己自己創建自己的唯一實例。
  3、單例類必須給所有其他對象提供這一實例。   

單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用??傊?,選擇單例模式就是為了避免不一致狀態,避免政出多頭。

首先看一個經典的單例實現。

public class Singleton {  private static Singleton uniqueInstance = null;  private Singleton() {    // Exists only to defeat instantiation.  }  public static Singleton getInstance() {    if (uniqueInstance == null) {      uniqueInstance = new Singleton();    }    return uniqueInstance;  }  // Other methods...}

Singleton通過將構造方法限定為private避免了類在外部被實例化,在同一個虛擬機范圍內,Singleton的唯一實例只能通過getInstance()方法訪問。(事實上,通過Java反射機制是能夠實例化構造方法為private的類的,那基本上會使所有的Java單例實現失效。此問題在此處不做討論,姑且掩耳盜鈴地認為反射機制不存在。)

但是以上實現沒有考慮線程安全問題。所謂線程安全是指:如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的?;蛘哒f:一個類或者程序所提供的接口對于線程來說是原子操作或者多個線程之間的切換不會導致該接口的執行結果存在二義性,也就是說我們不用考慮同步的問題。顯然以上實現并不滿足線程安全的要求,在并發環境下很可能出現多個Singleton實例。

public class TestStream {  private String name;  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }   //該類只能有一個實例  private TestStream(){}  //私有無參構造方法  //該類必須自行創建  //有2種方式  /*private static final TestStream ts=new TestStream();*/  private static TestStream ts1=null;  //這個類必須自動向整個系統提供這個實例對象  public static TestStream getTest(){    if(ts1==null){      ts1=new TestStream();    }    return ts1;  }  public void getInfo(){    System.out.println("output message "+name);  }}/** *  */public class TestMain {  public static void main(String [] args){    TestStream s=TestStream.getTest();    s.setName("張孝祥");    System.out.println(s.getName());    TestStream s1=TestStream.getTest();    s1.setName("張孝祥");    System.out.println(s1.getName());    s.getInfo();    s1.getInfo();    if(s==s1){      System.out.println("創建的是同一個實例");    }else if(s!=s1){      System.out.println("創建的不是同一個實例");    }else{      System.out.println("application error");    }  }}

運行結果:

張孝祥張孝祥output message 張孝祥output message 張孝祥創建的是同一個實例

結論:由結果可以得知單例模式為一個面向對象的應用程序提供了對象惟一的訪問點,不管它實現何種功能,整個應用程序都會同享一個實例對象。

1.餓漢式單例類

//餓漢式單例類.在類初始化時,已經自行實例化 public class Singleton1 {  //私有的默認構造子  private Singleton1() {}  //已經自行實例化   private static final Singleton1 single = new Singleton1();  //靜態工廠方法   public static Singleton1 getInstance() {    return single;  }}

2.懶漢式單例類

//懶漢式單例類.在第一次調用的時候實例化 public class Singleton2 {  //私有的默認構造子  private Singleton2() {}  //注意,這里沒有final    private static Singleton2 single=null;  //靜態工廠方法   public synchronized static Singleton2 getInstance() {     if (single == null) {        single = new Singleton2();     }     return single;  }}

3.登記式單例類

import java.util.HashMap;import java.util.Map;//登記式單例類.//類似Spring里面的方法,將類名注冊,下次從里面直接獲取。public class Singleton3 {  private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();  static{    Singleton3 single = new Singleton3();    map.put(single.getClass().getName(), single);  }  //保護的默認構造子  protected Singleton3(){}  //靜態工廠方法,返還此類惟一的實例  public static Singleton3 getInstance(String name) {    if(name == null) {      name = Singleton3.class.getName();      System.out.println("name == null"+"--->name="+name);    }    if(map.get(name) == null) {      try {        map.put(name, (Singleton3) Class.forName(name).newInstance());      } catch (InstantiationException e) {        e.printStackTrace();      } catch (IllegalAccessException e) {        e.printStackTrace();      } catch (ClassNotFoundException e) {        e.printStackTrace();      }    }    return map.get(name);  }  //一個示意性的商業方法  public String about() {      return "Hello, I am RegSingleton.";    }    public static void main(String[] args) {    Singleton3 single3 = Singleton3.getInstance(null);    System.out.println(single3.about());  }}

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产成人久久综合一区| 中文字幕av一区二区三区谷原希美| 亚洲精品www| 一本一本久久a久久精品牛牛影视| 日本久久中文字幕| 亚洲区中文字幕| 欧美激情精品久久久久| 国产精品自拍偷拍| 国产福利视频一区二区| 日韩av一区在线| 国产日韩在线观看av| 欧美日韩裸体免费视频| 欧美精品videos性欧美| 中文字幕少妇一区二区三区| 亚洲成人av资源网| 97精品久久久| 国产精品电影一区| 国产精品日韩在线播放| 午夜精品蜜臀一区二区三区免费| 亚洲娇小xxxx欧美娇小| 欧美激情手机在线视频| 色多多国产成人永久免费网站| 亚洲japanese制服美女| 精品亚洲一区二区| 国产精品丝袜久久久久久不卡| 韩国精品久久久999| 亚洲国产精品成人一区二区| 欧美激情精品久久久久| 青草青草久热精品视频在线观看| 亚洲欧洲日本专区| 久久6免费高清热精品| 久久精品成人欧美大片| 欧美成人一区二区三区电影| 国产福利精品在线| 日韩电影中文字幕av| 精品久久久一区| 国产精品久久久久久一区二区| 97在线视频免费播放| 色播久久人人爽人人爽人人片视av| 在线观看欧美视频| 国产精品27p| 亚洲激情 国产| 久久精品成人欧美大片古装| 国产精品伦子伦免费视频| 久久在线免费视频| 亚洲久久久久久久久久久| 亚洲影院色无极综合| 亚洲精品v天堂中文字幕| 欧美日韩第一页| 色琪琪综合男人的天堂aⅴ视频| 欧洲中文字幕国产精品| 日韩精品视频免费| 欧美巨猛xxxx猛交黑人97人| 亚洲国产精品一区二区久| 精品亚洲精品福利线在观看| 国产精品27p| 57pao国产精品一区| 久久久91精品| 国产精品稀缺呦系列在线| 日韩视频一区在线| 久久艳片www.17c.com| 成人网在线观看| 高跟丝袜一区二区三区| 欧美性极品少妇精品网站| 精品久久久久久久久久ntr影视| 一本一道久久a久久精品逆3p| 亚洲国产一区二区三区四区| 91九色精品视频| 久久久欧美精品| 色婷婷**av毛片一区| 国产成人精品综合久久久| 国模吧一区二区| 在线观看亚洲视频| 国产三级精品网站| 日韩电影第一页| 国产精品美女久久久久久免费| 国产一区二区三区在线| 中文字幕免费国产精品| 久久精品国产久精国产思思| 久久久久久久久久久人体| 欧美激情高清视频| 欧美肥臀大乳一区二区免费视频| 久久亚洲国产精品成人av秋霞| 精品久久香蕉国产线看观看亚洲| 成人福利视频网| 亚洲视频在线观看| 欧美在线www| 亚洲女人天堂视频| 亚洲精品国产精品国自产在线| 高清一区二区三区四区五区| 亚洲国产精品久久久| 国产日韩欧美黄色| 精品欧美一区二区三区| www.日本久久久久com.| 亚洲美女久久久| 久久久人成影片一区二区三区| 26uuu另类亚洲欧美日本老年| 亚洲区在线播放| 国产亚洲日本欧美韩国| 成人欧美一区二区三区黑人孕妇| 日韩精品视频免费专区在线播放| 亚洲高清一区二| 亚洲最大av在线| 姬川优奈aav一区二区| 亚洲一区二区免费| 青青草国产精品一区二区| 国产精品久久久久久久app| 曰本色欧美视频在线| 欧美成人午夜剧场免费观看| 国产亚洲精品久久| 亚洲男人天堂手机在线| 成人免费淫片视频软件| 91免费电影网站| 性欧美xxxx视频在线观看| 久久成人精品一区二区三区| 日韩在线观看高清| 播播国产欧美激情| 68精品久久久久久欧美| 欧美日韩精品中文字幕| 亚洲国产91精品在线观看| 精品国产老师黑色丝袜高跟鞋| 亚洲人成毛片在线播放| 91高清免费在线观看| 亚洲丝袜在线视频| 国产视频观看一区| 欧美性开放视频| 中文字幕日韩精品在线| 97视频免费观看| 中文字幕欧美日韩精品| 成人羞羞国产免费| 欧美成人性色生活仑片| 国产精品第七十二页| 日韩av电影中文字幕| 亚洲精品按摩视频| 久久国产精品亚洲| 社区色欧美激情 | 久久久久久有精品国产| 亚洲人成网站色ww在线| 中文字幕亚洲无线码a| 一本大道香蕉久在线播放29| 欧美肥臀大乳一区二区免费视频| 色综合久久久888| 成人精品久久久| 一本色道久久88综合亚洲精品ⅰ| 欧美激情亚洲另类| 韩国欧美亚洲国产| 日本午夜人人精品| 91精品久久久久久久久| 久久中文久久字幕| 97在线精品国自产拍中文| 久久精品国产一区二区三区| 97色在线视频观看| 国模视频一区二区三区| 91精品久久久久久久| 亚洲精品成人久久久| 成人在线观看视频网站| 亚洲成人网在线| 欧美一级在线播放| 久久天堂av综合合色| 精品国产乱码久久久久久虫虫漫画| 欧美一级免费视频| 成人午夜一级二级三级| 国产欧美在线视频| 51精品在线观看|