單例模式

單例模式

單例模式:Singleton模式包含的角色只有一個(gè),就是Singleton。Singleton擁有一個(gè)私有構(gòu)造函數(shù),確保用戶無(wú)法通過(guò)new直接實(shí)例它。除此之外,該模式中包含一個(gè)靜態(tài)私有成員變量instance與靜態(tài)公有方法Instance()。Instance方法負(fù)責(zé)檢驗(yàn)并實(shí)例化自己,然后存儲(chǔ)在靜態(tài)成員變量中,以確保只有一個(gè)實(shí)例被創(chuàng)建。


Singleton

Singleton:定義一個(gè)GetInstance操作,允許客戶訪問(wèn)他的唯一實(shí)例。GetInstance是一個(gè)靜態(tài)方法,主要作用是創(chuàng)建自己的唯一實(shí)例。


方法一

方法一:這使得代碼減少了許多,同時(shí)也解決了線程問(wèn)題帶來(lái)的性能上損失。Singleton類被聲明為sealed,以此保證它自己不會(huì)被繼承,其次沒(méi)有了Instance的方法,將原來(lái)_instance成員變量變成publicreadonly,并在聲明時(shí)被初始化。通過(guò)這些改變,我們確實(shí)得到了Singleton的模式,原因是在JIT的處理過(guò)程中,如果類中的static屬性被任何方法使用時(shí),.NETFramework將對(duì)這個(gè)屬性進(jìn)行初始化,于是在初始化Instance屬性的同時(shí)Singleton類實(shí)例得以創(chuàng)建和裝載。而私有的構(gòu)造函數(shù)和readonly(只讀)保證了Singleton不會(huì)被再次實(shí)例化,這正是Singleton設(shè)計(jì)模式的意圖。不過(guò)這也帶來(lái)了一些問(wèn)題,比如無(wú)法繼承,實(shí)例在程序一運(yùn)行就被初始化,無(wú)法實(shí)現(xiàn)延遲初始化等。


方法二

方法二:這實(shí)現(xiàn)了延遲初始化,并具有很多優(yōu)勢(shì)。


單例模式使用場(chǎng)景:?jiǎn)卫J降氖褂米匀皇钱?dāng)我們的系統(tǒng)中某個(gè)對(duì)象只需要一個(gè)實(shí)例的情況,例如:操作系統(tǒng)中只能有一個(gè)任務(wù)管理器,操作文件時(shí),同一時(shí)間內(nèi)只允許一個(gè)實(shí)例對(duì)其操作等,既然現(xiàn)實(shí)生活中有這樣的應(yīng)用場(chǎng)景,自然在軟件設(shè)計(jì)領(lǐng)域必須有這樣的解決方案了(因?yàn)檐浖O(shè)計(jì)也是現(xiàn)實(shí)生活中的抽象),所以也就有了單例模式了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容