




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三講單例模式1-第三講單例模式1-場(chǎng)景—夢(mèng)想SINGLETON—俺有6個(gè)漂亮的老婆,她們的老公都是我,我就是我們家里的老公Sigleton,她們只要說(shuō)道"老公",都是指的同一個(gè)人,那就是我(剛才做了個(gè)夢(mèng)啦,哪有這么好的事)
2-場(chǎng)景—夢(mèng)想SINGLETON—俺有6個(gè)漂亮的老婆,她們的老公單例(singleton)模式單例模式:?jiǎn)卫J酱_保某一個(gè)類(lèi)只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例單例模式。單例模式只應(yīng)在有真正的“單一實(shí)例”的需求時(shí)才可使用。單例模式的要點(diǎn)(1)某個(gè)類(lèi)只能有一個(gè)實(shí)例;(2)它必須自行創(chuàng)建這個(gè)實(shí)例;(3)它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。3-單例(singleton)模式單例模式:?jiǎn)卫J酱_保某一個(gè)類(lèi)單例模式的關(guān)鍵特征意圖:希望類(lèi)只有一個(gè)實(shí)例,但沒(méi)有控制類(lèi)實(shí)例化的全局變量(對(duì)象)。同時(shí)希望確保所有客體對(duì)象使用該類(lèi)的相同實(shí)例,而無(wú)需將引用傳給它們。問(wèn)題:幾個(gè)不同的客戶對(duì)象需要引用同一個(gè)對(duì)象,而且希望確保這種類(lèi)型的對(duì)象數(shù)目不超過(guò)一個(gè)。解決方案:保證一個(gè)實(shí)例參與者與協(xié)作者:客戶對(duì)象只能通過(guò)getInstance()方法創(chuàng)建單例類(lèi)的實(shí)例。效果:客戶對(duì)象無(wú)需操心是否存在單例類(lèi)的實(shí)例,實(shí)例化有單例類(lèi)自己控制。實(shí)現(xiàn):一個(gè)引用單例對(duì)象的靜態(tài)私有成員變量一個(gè)公共靜態(tài)方法,負(fù)責(zé)實(shí)現(xiàn)一次性的實(shí)例化并返回對(duì)單例對(duì)象的引用設(shè)置為保護(hù)或私有的構(gòu)造方法4-單例模式的關(guān)鍵特征意圖:希望類(lèi)只有一個(gè)實(shí)例,但沒(méi)有控制類(lèi)實(shí)例懶漢式VS餓漢式餓漢式:靜態(tài)初始化方式,在啟動(dòng)加載單例類(lèi)時(shí)就實(shí)例化對(duì)象,只實(shí)例化一次,以后用到的時(shí)候就不需要再去實(shí)例化了,加載類(lèi)的時(shí)候速度比較慢,但以后獲得對(duì)象時(shí)的速度比較快,該對(duì)象從加載到應(yīng)用結(jié)束一直占用資源。懶漢式:相當(dāng)于一個(gè)延遲加載機(jī)制,即你需要這個(gè)對(duì)象時(shí)候才去實(shí)例化,加載類(lèi)的時(shí)候速度比較快,但以后獲得對(duì)象時(shí)的速度比較慢,該對(duì)象在整個(gè)應(yīng)用的生命周期只有一部分時(shí)間占用資源。面臨多線程訪問(wèn)的安全性問(wèn)題,需要做雙重鎖定處理才可以保證安全。所以,到底使用哪一種方式,要看實(shí)際的需求5-懶漢式VS餓漢式餓漢式:靜態(tài)初始化方式,在啟動(dòng)加載單例單例(singleton)模式模式的結(jié)構(gòu)中只包括一個(gè)角色:?jiǎn)渭?lèi)(Singleton)
6-單例(singleton)模式模式的結(jié)構(gòu)中只包括一個(gè)角色:6餓漢式7-餓漢式7-懶漢式8-懶漢式8-單例模式示例—餓漢式publicclassEagerSingleton{//類(lèi)初始化時(shí),已經(jīng)自行實(shí)例化privatestaticfinalEagerSingletonm_instance=newEagerSingleton();privateEagerSingleton(){}//私有化構(gòu)造器publicstaticEagerSingletongetInstance(){returnm_instance;}}9-單例模式示例—餓漢式publicclassEagerSi單例模式示例—懶漢式publicclassSingleton{
privatestaticSingletoninstance=null;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){instance=newSingleton();}returninstance;}}10-單例模式示例—懶漢式publicclassSinglet單例模式的問(wèn)題在多線程程序中,Singleton模式可能會(huì)出現(xiàn)一個(gè)問(wèn)題。假設(shè)對(duì)getInstance()方法的兩個(gè)調(diào)用幾乎同時(shí)發(fā)生,這種情況可能非常糟糕。此時(shí)會(huì)發(fā)生什么?1.第一個(gè)線程檢查實(shí)例是否存在。因?yàn)閷?shí)例不存在,該線程執(zhí)行創(chuàng)建第一個(gè)實(shí)例的代碼部分。2.然而,假設(shè)在實(shí)例化完成之前,另一個(gè)線程也來(lái)檢查實(shí)例成員變量是否為null。因?yàn)榈谝粋€(gè)線程還什么都沒(méi)有創(chuàng)建,實(shí)例成員變量仍然等于null,所以第二個(gè)線程也執(zhí)行了創(chuàng)建一個(gè)對(duì)象的代碼。3.現(xiàn)在,兩個(gè)線程都執(zhí)行了Singleton對(duì)象的new操作,因此創(chuàng)建了兩個(gè)重復(fù)的對(duì)象。11-單例模式的問(wèn)題在多線程程序中,Singleton模式可能會(huì)出單例模式示例
—使用synchronizedpublicclassSingleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticsynchronizedSingletongetInstance(){if(instance==null){instance=newSingleton();}returninstance;}}12-單例模式示例
—使用synchronizedpublicc單例模式示例
—雙檢鎖
DCL(Double-checkedlocking)publicclassSingleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){//第一次檢查synchronized(Singleton.class){//第二次檢查if(instance==null){instance=newSingleton();}}}returninstance;}}13-單例模式示例
—雙檢鎖DCL(Double-checked單例模式示例--Classholder
publicclassSingletonFactory{
/*類(lèi)級(jí)的內(nèi)部類(lèi),也就是靜態(tài)的成員式內(nèi)部類(lèi),該內(nèi)部類(lèi)的實(shí)例與外部類(lèi)的實(shí)例沒(méi)有綁定關(guān)系,而且只有被調(diào)用到才會(huì)裝載,從而實(shí)現(xiàn)了延遲加載*/privatestaticclassSingletonHolder{publicstaticSingletoninstance=newSingleton();}//靜態(tài)初始化器,由JVM來(lái)保證線程安全
publicstaticSingletongetInstance(){returnSingletonHolder.instance;}}14-單例模式示例--Classholderpublicclholderclass模式什么是類(lèi)級(jí)內(nèi)部類(lèi)?
簡(jiǎn)單點(diǎn)說(shuō),類(lèi)級(jí)內(nèi)部類(lèi)指的是:有static修飾的成員式內(nèi)部類(lèi)。如果沒(méi)有static修飾的成員式內(nèi)部類(lèi)被稱為對(duì)象級(jí)內(nèi)部類(lèi)。類(lèi)級(jí)內(nèi)部類(lèi)相當(dāng)于其外部類(lèi)的static成分,它的對(duì)象與外部類(lèi)對(duì)象間不存在依賴關(guān)系,因此可直接創(chuàng)建。而對(duì)象級(jí)內(nèi)部類(lèi)的實(shí)例,是綁定在外部對(duì)象實(shí)例中的。類(lèi)級(jí)內(nèi)部類(lèi)中,可以定義靜態(tài)的方法,在靜態(tài)方法中只能夠引用外部類(lèi)中的靜態(tài)成員方法或者成員變量。類(lèi)級(jí)內(nèi)部類(lèi)相當(dāng)于其外部類(lèi)的成員,只有在第一次被使用的時(shí)候才會(huì)被裝載。15-holderclass模式什么是類(lèi)級(jí)內(nèi)部類(lèi)?
簡(jiǎn)單點(diǎn)說(shuō),holderclass模式在某些情況中,JVM已經(jīng)隱含地為您執(zhí)行了同步,這些情況下就不用自己再來(lái)進(jìn)行同步控制了。這些情況包括:由靜態(tài)初始化器(在靜態(tài)字段上或static{}塊中的初始化器)初始化數(shù)據(jù)時(shí)
訪問(wèn)final字段時(shí)要想很簡(jiǎn)單的實(shí)現(xiàn)線程安全,可以采用靜態(tài)初始化器的方式,它可以由JVM來(lái)保證線程安全性。比如前面的“餓漢式”實(shí)現(xiàn)方式,但是這樣一來(lái),不是會(huì)浪費(fèi)一定的空間嗎?因?yàn)檫@種實(shí)現(xiàn)方式,會(huì)在類(lèi)裝載的時(shí)候就初始化對(duì)象,不管你需不需要。16-holderclass模式在某些情況中,JVM已經(jīng)隱含地為holderclass模式的思路如果現(xiàn)在有一種方法能夠讓類(lèi)裝載的時(shí)候不去初始化對(duì)象,那不就解決問(wèn)題了?一種可行的方式就是采用類(lèi)級(jí)內(nèi)部類(lèi),在這個(gè)類(lèi)級(jí)內(nèi)部類(lèi)里面去創(chuàng)建對(duì)象實(shí)例,這樣一來(lái),只要不使用到這個(gè)類(lèi)級(jí)內(nèi)部類(lèi),那就不會(huì)創(chuàng)建對(duì)象實(shí)例。從而同時(shí)實(shí)現(xiàn)延遲加載和線程安全。17-holderclass模式的思路如果現(xiàn)在有一種方法能夠讓類(lèi)holderclass模式的思路當(dāng)getInstance方法第一次被調(diào)用的時(shí)候,它第一次讀取SingletonHolder.instance,導(dǎo)致SingletonHolder類(lèi)得到初始化;而這個(gè)類(lèi)在裝載并被初始化的時(shí)候,會(huì)初始化它的靜態(tài)域,從而創(chuàng)建Singleton的實(shí)例,由于是靜態(tài)的域,因此只會(huì)被虛擬機(jī)在裝載類(lèi)的時(shí)候初始化一次,并由虛擬機(jī)來(lái)保證它的線程安全性。這個(gè)模式的優(yōu)勢(shì)在于,getInstance方法并沒(méi)有被同步,并且只是執(zhí)行一個(gè)域的訪問(wèn),因此延遲初始化并沒(méi)有增加任何訪問(wèn)成本。18-holderclass模式的思路當(dāng)getInstance方Enumsingleton/**
*使用枚舉來(lái)實(shí)現(xiàn)單例模式的示例
*/
publicenumSingletonC{
/**
*定義一個(gè)枚舉的元素,它就代表了Singleton的一個(gè)實(shí)例
*/
uniqueInstance;
/**
*示意方法,單例可以有自己的操作
*/
publicvoidsingletonOperation(){
//功能處理
}
}
19-Enumsingleton/**
*使用枚舉來(lái)實(shí)現(xiàn)單例模單例模式示例1.單件類(lèi)(Singleton):Moon.javapublicclassMoon{privatestaticMoonuniqueMoon;doubleradius;doubledistanceToEarth;privateMoon(){uniqueMoon=this;radius=1738;distanceToEarth=363300;}publicstaticsynchronizedMoongetMoon(){if(uniqueMoon==null){uniqueMoon=newMoon();}returnuniqueMoon;}publicStringshow(){Strings="月亮的半徑是"+radius+"km,距地球是"+distanceToEarth+"km";returns;}}20-單例模式示例1.單件類(lèi)(Singleton):Moon.j單例模式示例應(yīng)用Application.javaimportjavax.swing.*;importjava.awt.*;publicclassApplication{publicstaticvoidmain(Stringargs[]){MyFramef1=newMyFrame("張三看月亮");MyFramef2=newMyFrame("李四看月亮");f1.setBounds(10,10,360,150);f2.setBounds(370,10,360,150);f1.validate();f2.validate();}}classMyFrameextendsJFrame{Stringstr;MyFrame(Stringtitle){setTitle(title);Moonmoon=Moon.getMoon();str=moon.show();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);setVisible(true);repaint();}publicvoidpaint(Graphicsg){super.paint(g);g.setFont(newFont("宋體",Font.BOLD,14));g.drawString(str,5,100);}}21-單例模式示例應(yīng)用Application.java21-單例模式的練習(xí)一個(gè)隨機(jī)數(shù)產(chǎn)生的例子在整個(gè)應(yīng)用程序中只需要一個(gè)類(lèi)的實(shí)例來(lái)產(chǎn)生隨機(jī)數(shù),客戶端程序從類(lèi)中獲取這個(gè)實(shí)例,調(diào)用這個(gè)實(shí)例的方法nextInt(),公用的方法訪問(wèn)需要進(jìn)行同步,這是單例模式需要解決的同步問(wèn)題。參與者:Singleton定義一個(gè)Instance操作,允許客戶訪問(wèn)它的唯一實(shí)例,Instance是一個(gè)類(lèi)操作,負(fù)責(zé)創(chuàng)建自己的唯一實(shí)例。協(xié)作關(guān)系:客戶只能通過(guò)Singleton的Instance操作訪問(wèn)一個(gè)Singleton的實(shí)例。22-單例模式的練習(xí)一個(gè)隨機(jī)數(shù)產(chǎn)生的例子22-第三講單例模式23-第三講單例模式1-場(chǎng)景—夢(mèng)想SINGLETON—俺有6個(gè)漂亮的老婆,她們的老公都是我,我就是我們家里的老公Sigleton,她們只要說(shuō)道"老公",都是指的同一個(gè)人,那就是我(剛才做了個(gè)夢(mèng)啦,哪有這么好的事)
24-場(chǎng)景—夢(mèng)想SINGLETON—俺有6個(gè)漂亮的老婆,她們的老公單例(singleton)模式單例模式:?jiǎn)卫J酱_保某一個(gè)類(lèi)只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例單例模式。單例模式只應(yīng)在有真正的“單一實(shí)例”的需求時(shí)才可使用。單例模式的要點(diǎn)(1)某個(gè)類(lèi)只能有一個(gè)實(shí)例;(2)它必須自行創(chuàng)建這個(gè)實(shí)例;(3)它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。25-單例(singleton)模式單例模式:?jiǎn)卫J酱_保某一個(gè)類(lèi)單例模式的關(guān)鍵特征意圖:希望類(lèi)只有一個(gè)實(shí)例,但沒(méi)有控制類(lèi)實(shí)例化的全局變量(對(duì)象)。同時(shí)希望確保所有客體對(duì)象使用該類(lèi)的相同實(shí)例,而無(wú)需將引用傳給它們。問(wèn)題:幾個(gè)不同的客戶對(duì)象需要引用同一個(gè)對(duì)象,而且希望確保這種類(lèi)型的對(duì)象數(shù)目不超過(guò)一個(gè)。解決方案:保證一個(gè)實(shí)例參與者與協(xié)作者:客戶對(duì)象只能通過(guò)getInstance()方法創(chuàng)建單例類(lèi)的實(shí)例。效果:客戶對(duì)象無(wú)需操心是否存在單例類(lèi)的實(shí)例,實(shí)例化有單例類(lèi)自己控制。實(shí)現(xiàn):一個(gè)引用單例對(duì)象的靜態(tài)私有成員變量一個(gè)公共靜態(tài)方法,負(fù)責(zé)實(shí)現(xiàn)一次性的實(shí)例化并返回對(duì)單例對(duì)象的引用設(shè)置為保護(hù)或私有的構(gòu)造方法26-單例模式的關(guān)鍵特征意圖:希望類(lèi)只有一個(gè)實(shí)例,但沒(méi)有控制類(lèi)實(shí)例懶漢式VS餓漢式餓漢式:靜態(tài)初始化方式,在啟動(dòng)加載單例類(lèi)時(shí)就實(shí)例化對(duì)象,只實(shí)例化一次,以后用到的時(shí)候就不需要再去實(shí)例化了,加載類(lèi)的時(shí)候速度比較慢,但以后獲得對(duì)象時(shí)的速度比較快,該對(duì)象從加載到應(yīng)用結(jié)束一直占用資源。懶漢式:相當(dāng)于一個(gè)延遲加載機(jī)制,即你需要這個(gè)對(duì)象時(shí)候才去實(shí)例化,加載類(lèi)的時(shí)候速度比較快,但以后獲得對(duì)象時(shí)的速度比較慢,該對(duì)象在整個(gè)應(yīng)用的生命周期只有一部分時(shí)間占用資源。面臨多線程訪問(wèn)的安全性問(wèn)題,需要做雙重鎖定處理才可以保證安全。所以,到底使用哪一種方式,要看實(shí)際的需求27-懶漢式VS餓漢式餓漢式:靜態(tài)初始化方式,在啟動(dòng)加載單例單例(singleton)模式模式的結(jié)構(gòu)中只包括一個(gè)角色:?jiǎn)渭?lèi)(Singleton)
28-單例(singleton)模式模式的結(jié)構(gòu)中只包括一個(gè)角色:6餓漢式29-餓漢式7-懶漢式30-懶漢式8-單例模式示例—餓漢式publicclassEagerSingleton{//類(lèi)初始化時(shí),已經(jīng)自行實(shí)例化privatestaticfinalEagerSingletonm_instance=newEagerSingleton();privateEagerSingleton(){}//私有化構(gòu)造器publicstaticEagerSingletongetInstance(){returnm_instance;}}31-單例模式示例—餓漢式publicclassEagerSi單例模式示例—懶漢式publicclassSingleton{
privatestaticSingletoninstance=null;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){instance=newSingleton();}returninstance;}}32-單例模式示例—懶漢式publicclassSinglet單例模式的問(wèn)題在多線程程序中,Singleton模式可能會(huì)出現(xiàn)一個(gè)問(wèn)題。假設(shè)對(duì)getInstance()方法的兩個(gè)調(diào)用幾乎同時(shí)發(fā)生,這種情況可能非常糟糕。此時(shí)會(huì)發(fā)生什么?1.第一個(gè)線程檢查實(shí)例是否存在。因?yàn)閷?shí)例不存在,該線程執(zhí)行創(chuàng)建第一個(gè)實(shí)例的代碼部分。2.然而,假設(shè)在實(shí)例化完成之前,另一個(gè)線程也來(lái)檢查實(shí)例成員變量是否為null。因?yàn)榈谝粋€(gè)線程還什么都沒(méi)有創(chuàng)建,實(shí)例成員變量仍然等于null,所以第二個(gè)線程也執(zhí)行了創(chuàng)建一個(gè)對(duì)象的代碼。3.現(xiàn)在,兩個(gè)線程都執(zhí)行了Singleton對(duì)象的new操作,因此創(chuàng)建了兩個(gè)重復(fù)的對(duì)象。33-單例模式的問(wèn)題在多線程程序中,Singleton模式可能會(huì)出單例模式示例
—使用synchronizedpublicclassSingleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticsynchronizedSingletongetInstance(){if(instance==null){instance=newSingleton();}returninstance;}}34-單例模式示例
—使用synchronizedpublicc單例模式示例
—雙檢鎖
DCL(Double-checkedlocking)publicclassSingleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){//第一次檢查synchronized(Singleton.class){//第二次檢查if(instance==null){instance=newSingleton();}}}returninstance;}}35-單例模式示例
—雙檢鎖DCL(Double-checked單例模式示例--Classholder
publicclassSingletonFactory{
/*類(lèi)級(jí)的內(nèi)部類(lèi),也就是靜態(tài)的成員式內(nèi)部類(lèi),該內(nèi)部類(lèi)的實(shí)例與外部類(lèi)的實(shí)例沒(méi)有綁定關(guān)系,而且只有被調(diào)用到才會(huì)裝載,從而實(shí)現(xiàn)了延遲加載*/privatestaticclassSingletonHolder{publicstaticSingletoninstance=newSingleton();}//靜態(tài)初始化器,由JVM來(lái)保證線程安全
publicstaticSingletongetInstance(){returnSingletonHolder.instance;}}36-單例模式示例--Classholderpublicclholderclass模式什么是類(lèi)級(jí)內(nèi)部類(lèi)?
簡(jiǎn)單點(diǎn)說(shuō),類(lèi)級(jí)內(nèi)部類(lèi)指的是:有static修飾的成員式內(nèi)部類(lèi)。如果沒(méi)有static修飾的成員式內(nèi)部類(lèi)被稱為對(duì)象級(jí)內(nèi)部類(lèi)。類(lèi)級(jí)內(nèi)部類(lèi)相當(dāng)于其外部類(lèi)的static成分,它的對(duì)象與外部類(lèi)對(duì)象間不存在依賴關(guān)系,因此可直接創(chuàng)建。而對(duì)象級(jí)內(nèi)部類(lèi)的實(shí)例,是綁定在外部對(duì)象實(shí)例中的。類(lèi)級(jí)內(nèi)部類(lèi)中,可以定義靜態(tài)的方法,在靜態(tài)方法中只能夠引用外部類(lèi)中的靜態(tài)成員方法或者成員變量。類(lèi)級(jí)內(nèi)部類(lèi)相當(dāng)于其外部類(lèi)的成員,只有在第一次被使用的時(shí)候才會(huì)被裝載。37-holderclass模式什么是類(lèi)級(jí)內(nèi)部類(lèi)?
簡(jiǎn)單點(diǎn)說(shuō),holderclass模式在某些情況中,JVM已經(jīng)隱含地為您執(zhí)行了同步,這些情況下就不用自己再來(lái)進(jìn)行同步控制了。這些情況包括:由靜態(tài)初始化器(在靜態(tài)字段上或static{}塊中的初始化器)初始化數(shù)據(jù)時(shí)
訪問(wèn)final字段時(shí)要想很簡(jiǎn)單的實(shí)現(xiàn)線程安全,可以采用靜態(tài)初始化器的方式,它可以由JVM來(lái)保證線程安全性。比如前面的“餓漢式”實(shí)現(xiàn)方式,但是這樣一來(lái),不是會(huì)浪費(fèi)一定的空間嗎?因?yàn)檫@種實(shí)現(xiàn)方式,會(huì)在類(lèi)裝載的時(shí)候就初始化對(duì)象,不管你需不需要。38-holderclass模式在某些情況中,JVM已經(jīng)隱含地為holderclass模式的思路如果現(xiàn)在有一種方法能夠讓類(lèi)裝載的時(shí)候不去初始化對(duì)象,那不就解決問(wèn)題了?一種可行的方式就是采用類(lèi)級(jí)內(nèi)部類(lèi),在這個(gè)類(lèi)級(jí)內(nèi)部類(lèi)里面去創(chuàng)建對(duì)象實(shí)例,這樣一來(lái),只要不使用到這個(gè)類(lèi)級(jí)內(nèi)部類(lèi),那就不會(huì)創(chuàng)建對(duì)象實(shí)例。從而同時(shí)實(shí)現(xiàn)延遲加載和線程安全。39-holderclass模式的思路如果現(xiàn)在有一種方法能夠讓類(lèi)holderclass模式的思路當(dāng)getInstance方法第一次被調(diào)用的時(shí)候,它第一次讀取SingletonHolder.instance,導(dǎo)致SingletonHolder類(lèi)得到初始化;而這個(gè)類(lèi)在裝載并被初始化的時(shí)候,會(huì)初始化它的靜態(tài)域,從而創(chuàng)建Singleton的實(shí)例,由于是靜態(tài)的域,因此只會(huì)被虛擬機(jī)在裝載類(lèi)的時(shí)候初始化一次,并由虛擬機(jī)來(lái)保證它的線程安全性。這個(gè)模式的優(yōu)勢(shì)在于,getInstance方法并沒(méi)有被同步,并且只是執(zhí)行一個(gè)域的訪問(wèn),因此延遲初始化并沒(méi)有增加任何訪問(wèn)成本。40-holderclass模式的思路當(dāng)getInstance方Enumsingleton/**
*使用枚舉來(lái)實(shí)現(xiàn)單例模式的示例
*/
publicenumSingletonC{
/**
*定義一個(gè)枚舉的元素,它就代表了Singleton的一個(gè)實(shí)例
*/
uniqueInstance;
/**
*示意方法,單例可以有自己的操作
*/
publicvoidsingletonOperation(){
//功能處理
}
}
41-Enumsingleton/**
*使用枚舉來(lái)實(shí)現(xiàn)單例模單例模式示例1.單件類(lèi)(Singleton):Moon.javapublicclassMoon{privatestaticMoonuniqueMoon;doubleradius;doubledistanceToEarth;privateMoon(){uniqueMoon=this;radius=1738;distanceToEarth=363300;}publicstaticsynchronizedMoongetMoon(){if(uniqueMoon==null){uniqueMoon=newMoon();}returnuniqueMoon;}publicStringshow(){Strings="月亮的半徑是"+radius
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自貢商業(yè)保潔合同協(xié)議
- 裝飾公司保潔合同協(xié)議
- 融資租賃分期合同協(xié)議
- 船員聘用服務(wù)合同協(xié)議
- 裝修辦公桌合同協(xié)議范本
- 街道違建拆除合同協(xié)議
- 舞蹈轉(zhuǎn)讓協(xié)議書(shū)范本
- 葛根種植回購(gòu)合同協(xié)議
- 薪資告知協(xié)議書(shū)范本
- 藥品合作伙伴合同協(xié)議
- 良性陣發(fā)性位置性眩暈臨床路徑
- 2023屆天津市南開(kāi)區(qū)高三一模(質(zhì)量檢測(cè)一)語(yǔ)文試題和答案詳解
- 不確定的危機(jī)下做確定的業(yè)績(jī)
- 精神科病歷書(shū)寫(xiě)培訓(xùn)講義課件
- JJF 1939-2021 熱式風(fēng)速儀校準(zhǔn)規(guī)范 高清晰版
- 鋼筋混凝土排水管三級(jí)管配筋設(shè)計(jì)圖冊(cè)
- 最新火電廠工作原理演示文稿
- 證據(jù)清單模板
- NB∕T 10897-2021 烴基生物柴油
- GB/T 25995-2010精細(xì)陶瓷密度和顯氣孔率試驗(yàn)方法
- 流動(dòng)資金貸款額度測(cè)算表
評(píng)論
0/150
提交評(píng)論