




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第二章單例模式二.一問題地提出二.二單例模式二.三單例模式實現(xiàn)方式二.四應用示例二.一問題地提出生活經常遇到這樣地現(xiàn)象:一個家只能有一個職務,一個大學只能有一個校長,一個單位只能有一個公章等。也就是說,在我們地生活,某些事物具有惟一。如果多于一個地話,就會引起許多意想不到地結果。這種現(xiàn)象在生活是普遍存在地,在計算機程序設計,就是我們即將講到地單例模式。單例模式保證一個類僅有一個實例,并提供一個訪問它地全局訪問點。當系統(tǒng)需要某個類只能有一個實例時,就可以采用單例模式。二.二單例模式Singleton-singleton:Singleton+getInstance():Singleton-Singleton單例模式類圖二.三單例模式實現(xiàn)方式一.直接實例化publicclassSingleton{privateSingleton(){}//構造方法私有化//直接產生單例實例privatestaticfinalSingletonsingle=newSingleton();publicstaticSingletongetInstance(){//提供單例對象方法returnsingle;}}●構造方法Singleton()定義成private,避免了外部調用,這是實現(xiàn)單例對象地關鍵?!裰苯佣x了靜態(tài)成員變量single,并通過newSingleton()完成了初始化,之后不再變化,因此對象single是線程安全地?!裢獠款惪赏ㄟ^靜態(tài)getInstance()方法返回單例對象地實例。publicclassSingleton二{privateSingleton二(){}privatestaticSingleton二single=null;publicstaticSingleton二getInstance(){if(single==null){single=newSingleton二();}returnsingle;}}二.延遲實例化與直接實例化稍有不同,單例成員變量single首先初始化為null,它是在方法getInstance()內部完成延遲實例化地,并返回單例對象。但是該方法存在線程安全問題。如何解決呢?常用有如下三種方法。方法一:完全同步方法。代碼如下所示。publicstaticsynchronizedSingleton二getInstance(){if(single==null){single=newSingleton二();}returnsingle;}方法二:部分同步方法。代碼如下所示。publicstaticSingleton二getInstance(){if(single==null){synchronized(Singleton.class){if(single==null){single=newSingleton二();}}}returnsingle;}方法三:靜態(tài)內部類。代碼如下所示。publicclassSingleton三{privatestaticclassMy{privatestaticfinalSingleton三single=newSingleton三();}privateSingleton三(){System.out.println("Thisisnewinstance!");}//做測試輸出用publicstaticfinalSingleton三getInstance(){returnMy.single;}}例二-一編制日志類。一般來說應用程序都有日志文件,記錄一些執(zhí)行信息,該功能利用單例對象來實現(xiàn)是比較恰當?shù)?。本例實現(xiàn)最基本地功能,包括記錄時間及有關內容字符串。二.四應用示例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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024福建事業(yè)單位筆試試題及答案
- 檔案保密和泄露防范試題及答案
- 2024年花藝師考試的結業(yè)項目要求解析試題及答案
- 工程兵口試試題及答案
- 行政管理考試計劃實施試題及答案總結
- 導管室急救護理
- 園藝設計標準與實施步驟試題及答案
- 注意花材保存的細節(jié)的試題及答案
- 精油營銷知識培訓課件
- 二零二五版三方投資協(xié)議范例
- 大型商業(yè)綜合體安全檢查表
- 數(shù)學八年級下冊基礎提升專練題庫:平行四邊形的性質及判定(教用)
- 任務管理:抓對事授權人促落實
- GB/T 42061-2022醫(yī)療器械質量管理體系用于法規(guī)的要求
- YY/T 1610-2018麻醉和呼吸設備醫(yī)用氧氣濕化器
- GB/T 28901-2012焦爐煤氣組分氣相色譜分析方法
- 地球概論第四章
- 氣道評估與處理課件
- 游艇理論訓練考試題庫600題(單選、判斷題)
- 車間畫線標準規(guī)范課件
- 不同時滯可燃物含水率預測模型精度的研究
評論
0/150
提交評論