02 設(shè)計模式02 (單例模式).ppt_第1頁
02 設(shè)計模式02 (單例模式).ppt_第2頁
02 設(shè)計模式02 (單例模式).ppt_第3頁
02 設(shè)計模式02 (單例模式).ppt_第4頁
02 設(shè)計模式02 (單例模式).ppt_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單例模式,學(xué)習(xí)問題,在很多情況下,我們希望一個類只能有一個實例。因為如果這個類的多個實例同時存在,可能會導(dǎo)致一些問題。例如,一個計算機系統(tǒng)可以有多個打印機,但只能運行一個打印機管理器,并且每個打印機只能有一個實例對象。如何創(chuàng)建一個對象,假設(shè)你的類是我的對象,你如何創(chuàng)建一個對象?新的MyObject();如果另一個對象想要創(chuàng)建一個我的對象對象,他能再次調(diào)用我的對象上的新操作嗎?如果課程是公開的,你可以。如果類不是公共的,只有同一個包中的類可以實例化它,但是它仍然可以被實例化多次。如何創(chuàng)建一個對象,你能做到嗎?公共類我的類私人類我的類()討論:這個類可以實例化嗎?討論:有什么對象可以調(diào)用構(gòu)造函數(shù)M

2、yClass()嗎?如何創(chuàng)建一個對象,下面的代碼是什么意思?公共類my class public static my class getinstance()我的類是一個帶有靜態(tài)方法的類,其靜態(tài)方法可以如下調(diào)用:如何創(chuàng)建一個對象,如果我們把上面兩段代碼放在一起呢?公共類我的類我的類私有我的類()公共靜態(tài)我的類獲取實例()那么,有沒有別的方法來實例化一個對象?實例化一個對象,公共類我的類私有靜態(tài)我的類唯一實例;/如果(unique instance=null)unique instance=new myclass(),則其他成員變量聲明私有my class()公共靜態(tài)my class getins

3、tance();返回唯一實例/其他成員方法聲明類我的類只能有一個實例對象嗎?惰性單例類,公共類惰性單例私有靜態(tài)我的類唯一實例;/如果(unique instance=null)unique instance=new lazy singleton(),則其他成員變量聲明私有惰性singleton()、公共靜態(tài)my類getinstance();返回唯一實例/其他成員方法聲明類LazySingleton只有在第一次被引用時才被實例化。此類的靜態(tài)加載不會實例化自身。singleton模式的關(guān)鍵特性,意圖:我希望只有一個類的實例,但是沒有全局變量(對象)來控制類的實例化。同時,我們希望確保所有的來賓對象

4、使用相同的類實例,而不傳遞對它們的引用。問題:幾個不同的客戶對象需要引用同一個對象,您需要確保這種類型的對象不超過一個。解決方案:確保實例、單例模式的關(guān)鍵特性、參與者和協(xié)作者:客戶端對象只能通過getInstance()方法創(chuàng)建單個實例類的實例。效果:客戶對象不需要擔(dān)心是否有單例類的實例,并且實例化是由單例類本身控制的。實現(xiàn):引用單例對象的靜態(tài)私有成員變量是一個公共靜態(tài)方法,它負(fù)責(zé)實現(xiàn)一次性實例化,并返回對單例對象的引用被設(shè)置為受保護(hù)或私有的構(gòu)造方法。單例模式一般結(jié)構(gòu)圖、創(chuàng)建、多線程問題。如果程序在多線程環(huán)境中運行,很難保證上面的單例類只被實例化一次。一旦發(fā)生,如何改進(jìn)可能出現(xiàn)的問題?處理多線

5、程,公共類單例私有靜態(tài)單例唯一實例;私有單例()公共靜態(tài)同步單例getInstance()如果(唯一實例=空)唯一實例=新單例();返回uniqueInstance,雙重檢查鎖定模式,公共類DCL單例私有易失性靜態(tài)DCL單例唯一實例;私有DCLSingleton()公共靜態(tài)DCLSingleton getInstance()如果(uniqueInstance=null)已同步(DCLSingleton.calss)如果(UNiqueInstance=null)UNiqueInstance=新DClsingleton();返回uniqueInstance在創(chuàng)建對象之前,添加檢查以避免不必要的鎖定并提高效率。,餓漢式單例類,公共類面積單位私有靜態(tài)最終面積單位唯一實例=新面積單位();私有EagerSingleton()公共靜態(tài)EagerSingleton

溫馨提示

  • 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

提交評論