![設(shè)計(jì)模式單例模式_第1頁](http://file4.renrendoc.com/view11/M01/08/19/wKhkGWVomiaAU9VjAACr_GNdK2g416.jpg)
![設(shè)計(jì)模式單例模式_第2頁](http://file4.renrendoc.com/view11/M01/08/19/wKhkGWVomiaAU9VjAACr_GNdK2g4162.jpg)
![設(shè)計(jì)模式單例模式_第3頁](http://file4.renrendoc.com/view11/M01/08/19/wKhkGWVomiaAU9VjAACr_GNdK2g4163.jpg)
![設(shè)計(jì)模式單例模式_第4頁](http://file4.renrendoc.com/view11/M01/08/19/wKhkGWVomiaAU9VjAACr_GNdK2g4164.jpg)
![設(shè)計(jì)模式單例模式_第5頁](http://file4.renrendoc.com/view11/M01/08/19/wKhkGWVomiaAU9VjAACr_GNdK2g4165.jpg)
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境工程技術(shù)實(shí)施指南
- 亞馬遜店鋪托管合同范本
- 1314奶茶加盟合同范本
- 代買車位合同范本
- 農(nóng)村種樹土地流轉(zhuǎn)合同范本
- 國際工程總承包項(xiàng)目外事管理的問題及應(yīng)對措施
- 2025年度新型環(huán)保水泥管購銷合同協(xié)議
- 代購合伙合同范例
- 出資協(xié)議簽署合同范本
- 農(nóng)村購買荒地合同范例
- 強(qiáng)化提升1解三角形中的三線問題(解析)
- 異地就醫(yī)備案的個人承諾書
- 2024-2030年中國ODM服務(wù)器行業(yè)市場發(fā)展分析及前景趨勢與投資研究報告
- 六年級下健康教案設(shè)計(jì)
- 室內(nèi)裝飾拆除專項(xiàng)施工方案
- 醫(yī)院院外會診申請單、醫(yī)師外出會診審核表、醫(yī)師外出會診回執(zhí)
- 鋼筋工程精細(xì)化管理指南(中建內(nèi)部)
- 2024年山西省高考考前適應(yīng)性測試 (一模)英語試卷(含答案詳解)
- 教科版六年級下冊科學(xué)第三單元《宇宙》教材分析及全部教案(定稿;共7課時)
- 2024年中國鐵路投資集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 干部人事檔案數(shù)字化 制度
評論
0/150
提交評論