但離模式_第1頁
已閱讀1頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.單例模式(單例模式(SingletonPattern)前面說提到的五種創(chuàng)建模式,主要解決的問題是如何創(chuàng)建對象,獲得產(chǎn)品。而單例模式最要關(guān)心的則是對象創(chuàng)建的次數(shù)以及何時被創(chuàng)建。Singleton模式可以是很簡單的,它的全部只需要一個類就可以完成(看看這章可憐的UML圖)。但是如果在“對象創(chuàng)建的次數(shù)以及何時被創(chuàng)建”這兩點(diǎn)上較真起來,Singleton模式可以相當(dāng)?shù)膹?fù)雜,比頭五種模式加起來還復(fù)雜,譬如涉及到DCL雙鎖檢測(doubleche

2、ckedlocking)的討論、涉及到多個類加載器(ClassLoader)協(xié)同時、涉及到跨JVM(集群、遠(yuǎn)程EJB等)時、涉及到單例對象被銷毀后重建等。對于復(fù)雜的情況,本章中會涉及到其中一些[1]目的:目的:希望對象只創(chuàng)建一個實(shí)例,并且提供一個全局的訪問點(diǎn)。場景:場景:Kerrigan對于Zerg來說是個至關(guān)重要的靈魂人物,無數(shù)的Drone、Zergling、Hydralisk……可以被創(chuàng)造、被犧牲,但是Kerrigan得存在關(guān)系到Z

3、erg在這局游戲中的生存,而且Kerrigan是不允許被多次創(chuàng)造的,必須有且只有一個蟲族刀鋒女王的實(shí)例存在,這不是游戲規(guī)則,但這是個政治問題。分析:分析:如前面一樣,我們還是嘗試使用代碼來描述訪問Kerrigan的過程,看看下面的UML圖,簡單得我都不怎么好意思放上來占版面。圖6.1單例模式的UML圖結(jié)構(gòu)是簡單的,只是我們還有一些小小的要求如下:1.最基本要求:每次從getInstance()都能返回一個且唯一的一個Kerrigan對象

4、。??returninstance????這個寫法我們把四點(diǎn)需求從上往下檢測,發(fā)現(xiàn)第二點(diǎn)的時候就出了問題,假設(shè)這樣的場景:兩個線程并發(fā)調(diào)用SingletonKerriganA.getInstance(),假設(shè)線程一先判斷完instance是否為null,既代碼中的lineA進(jìn)入到lineB的位置。剛剛判斷完畢后,JVM將CPU資源切換給線程二,由于線程一還沒執(zhí)行l(wèi)ineB,所以instance仍然是空的,因此線程二執(zhí)行了newSignl

5、etonKerriganA()操作。片刻之后,線程一被重新喚醒,它執(zhí)行的仍然是newSignletonKerriganA()操作,好了,問題來了,兩個Kerrigan誰是李逵誰是李鬼?緊接著,我們做單例模式的第二次嘗試:Java代碼代碼????實(shí)現(xiàn)單例訪問Kerrigan的第二次嘗試????publicclassSingletonKerriganB??????單例對象實(shí)例????privatestaticSingletonKerriga

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論