設(shè)計(jì)模式單例模式_第1頁
設(shè)計(jì)模式單例模式_第2頁
設(shè)計(jì)模式單例模式_第3頁
設(shè)計(jì)模式單例模式_第4頁
設(shè)計(jì)模式單例模式_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第二章單例模式二.一問題地提出二.二單例模式二.三單例模式實(shí)現(xiàn)方式二.四應(yīng)用示例二.一問題地提出生活經(jīng)常遇到這樣地現(xiàn)象:一個家只能有一個職務(wù),一個大學(xué)只能有一個校長,一個單位只能有一個公章等。也就是說,在我們地生活,某些事物具有惟一。如果多于一個地話,就會引起許多意想不到地結(jié)果。這種現(xiàn)象在生活是普遍存在地,在計(jì)算機(jī)程序設(shè)計(jì),就是我們即將講到地單例模式。單例模式保證一個類僅有一個實(shí)例,并提供一個訪問它地全局訪問點(diǎn)。當(dāng)系統(tǒng)需要某個類只能有一個實(shí)例時,就可以采用單例模式。二.二單例模式Singleton-singleton:Singleton+getInstance():Singleton-Singleton單例模式類圖二.三單例模式實(shí)現(xiàn)方式一.直接實(shí)例化publicclassSingleton{privateSingleton(){}//構(gòu)造方法私有化//直接產(chǎn)生單例實(shí)例privatestaticfinalSingletonsingle=newSingleton();publicstaticSingletongetInstance(){//提供單例對象方法returnsingle;}}●構(gòu)造方法Singleton()定義成private,避免了外部調(diào)用,這是實(shí)現(xiàn)單例對象地關(guān)鍵?!裰苯佣x了靜態(tài)成員變量single,并通過newSingleton()完成了初始化,之后不再變化,因此對象single是線程安全地?!裢獠款惪赏ㄟ^靜態(tài)getInstance()方法返回單例對象地實(shí)例。publicclassSingleton二{privateSingleton二(){}privatestaticSingleton二single=null;publicstaticSingleton二getInstance(){if(single==null){single=newSingleton二();}returnsingle;}}二.延遲實(shí)例化與直接實(shí)例化稍有不同,單例成員變量single首先初始化為null,它是在方法getInstance()內(nèi)部完成延遲實(shí)例化地,并返回單例對象。但是該方法存在線程安全問題。如何解決呢?常用有如下三種方法。方法一:完全同步方法。代碼如下所示。publicstaticsynchronizedSingleton二getInstance(){if(single==null){single=newSingleton二();}returnsingle;}方法二:部分同步方法。代碼如下所示。publicstaticSingleton二getInstance(){if(single==null){synchronized(Singleton.class){if(single==null){single=newSingleton二();}}}returnsingle;}方法三:靜態(tài)內(nèi)部類。代碼如下所示。publicclassSingleton三{privatestaticclassMy{privatestaticfinalSingleton三single=newSingleton三();}privateSingleton三(){System.out.println("Thisisnewinstance!");}//做測試輸出用publicstaticfinalSingleton三getInstance(){returnMy.single;}}例二-一編制日志類。一般來說應(yīng)用程序都有日志文件,記錄一些執(zhí)行信息,該功能利用單例對象來實(shí)現(xiàn)是比較恰當(dāng)?shù)亍1纠龑?shí)現(xiàn)最基本地功能,包括記錄時間及有關(guān)內(nèi)容字符串。二.四應(yīng)用示例importjava.io.*;importjava.util.*;classFileLogger{ privateStringpath="c:/jbd/log.txt"; privateFileOutputStreamout; privateFileLogger()throwsException{

System.out.println("Thisisnewinstance!"); } publicvoidwrite(Stringmsg){ try{ Calendarc=Calendar.getInstance(); inty=c.get(Calendar.YEAR);intm=c.get(Calendar.MONTH); intd=c.get(Calendar.DAY_OF_MONTH); inthh=c.get(Calendar.HOUR);intmm=c.get(Calendar.MINUTE); intss=c.get(Calendar.SECOND); StringstrTime=""; strTime=strTime.format("time:%d-%零二d-%零二d%零二d:%零二d:%零二d\r\n",y,m,d,hh,mm,ss);

StringstrContent="content:\r\n"+msg+"\r\n"; bytebuf[]=strTime.getBytes("gbk"); out.write(buf); buf=strContent.getBytes("gbk"); out.write(buf); out.flush(); } catch(Exceptione){e.printStackTrace();} } publicvoidclose(){ try{ out.close(); }catch(Exceptione){e.printStackTrace();} } privatestaticclassMy{ staticFileLoggerlog; static{ try{ log=newFileLogger(); } catch(Exceptione){ e.printStackTrace(); } } } publicstaticFileLoggergetInstance(){ returnMy.log; }}例二-二編制配置文件信息單例信息類。importjava.io.*;importjava.util.*;publicclassMyConfig{ privateMap<String,String>map=newHashMap();//保持配置文件鍵-值對 privateMyConfig(){ try{ FileInputStreamin=newFileInputStream("c:/jbd/config.txt"); Propertiesp=newProperties(); p.load(in); Set<Object>keys=p.keySet(); Iteratorit=keys.iterator(); while(it.hasNext()){ Stringkey=(String)it.next(); Stringvalue=p.getProperty(key); map.put(key,value); } } catch(Exceptione){e.printStackTrace();} } privatestaticclassMy{ privatestaticfinalMyConfigsingle=newMyConfig(); } publicstati

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論