操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    單例模式有以下特點:

    1、單例類只能有一個實例。

    2、單例類必須自己創建自己的唯一實例。

    3、單例類必須給所有其他對象提供這一實例。

    java單例模式詳細介紹可以看這里_java單例模式餓漢式_java 單例模式類圖

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

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

    [java]view ?

    class { =null; (){// only to .} (){if( ==null){ =new ();} ;}//Other ...}

    java單例模式詳細介紹可以看這里_java 單例模式類圖_java單例模式餓漢式

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

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

    [java]view ?

    jason.; class {=null; (){ name;} void (){this.name=name;} Test (){} =null; (){if(ts1==null){ts1=new ();} 1;} void (){.out.("the name is"+name);}}

    java 單例模式類圖_java單例模式餓漢式_java單例模式詳細介紹可以看這里

    [java]view ?

    jason.; class TMain{ void main([]args){Test =.();ts1.("jason");=.();ts2.("0539");ts1.();ts2.();if(ts1==ts2){.out.("創建的是同一個實例");}else{.out.("創建的不是同一個實例");}}}

    運行結果:

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

    java單例模式詳細介紹可以看這里_java單例模式餓漢式_java 單例模式類圖

    1.餓漢式單例類

    [java]view ?

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

    2.懶漢式單例類

    java單例模式詳細介紹可以看這里_java單例模式餓漢式_java 單例模式類圖

    [java]view ?

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

    [java]view ?

    java.util.; java.util.Map;//登記式單例類.//類似里面的方法,將類名注冊,下次從里面直接獲取。 class { =new ();{ =new ();map.put(.().(),);}//保護的默認構造子 (){}//靜態工廠方法,返還此類惟一的實例 (){if(name==null){name=.class.();.out.("name==null"+"--->name="+name);}if(map.get(name)==null){try{map.put(name,()Class.(name).());}catch(one){e.();}catch(one){e.();}catch(one){e.();}}.get(name);}//一個示意性的商業方法 about(){"Hello,.";} void main([]args){ =.(null);.out.(.about());}}

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有