C#?單例模式的多種實(shí)現(xiàn)方式
單例模式介紹
單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它主要確保在一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)來獲取該實(shí)例。在C#中,有多種方式實(shí)現(xiàn)單例模式,每種方式都有其特定的使用場(chǎng)景和注意事項(xiàng)。
設(shè)計(jì)模式的作用
- 提高代碼的可重用性:通過定義一套標(biāo)準(zhǔn)的解決方案,設(shè)計(jì)模式使得相同或類似的問題可以在不同的項(xiàng)目中復(fù)用相同的代碼結(jié)構(gòu)或邏輯。
- 增強(qiáng)代碼的可讀性:設(shè)計(jì)模式使用清晰、簡(jiǎn)潔的方式表達(dá)復(fù)雜的代碼邏輯,使得其他開發(fā)者能夠更容易地理解和維護(hù)代碼。
- 提高系統(tǒng)的可維護(hù)性:設(shè)計(jì)模式遵循一定的設(shè)計(jì)原則,如開閉原則、里氏代換原則等,這些原則有助于降低系統(tǒng)各部分的耦合度,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性。
餓漢式單例模式
餓漢式單例是在類加載時(shí)就創(chuàng)建實(shí)例。優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是如果該實(shí)例不被使用會(huì)造成資源浪費(fèi)。
/// <summary> /// 餓漢式單例模式 /// </summary> public class SingletonEager { private SingletonEager() { } private static readonly SingletonEager _instance = new SingletonEager(); public static SingletonEager Instance { get { return _instance; } } public void DoSomething() { Console.WriteLine("餓漢式單例模式."); } }
懶漢式單例模式
懶漢式單例在第一次被訪問時(shí)才創(chuàng)建實(shí)例。為了線程安全,通常需要使用鎖機(jī)制。
/// <summary> /// 懶漢式單例模式 /// </summary> public class SingletonLazy { private SingletonLazy() { } private static SingletonLazy? _instance; private static readonly object _lockObj = new object(); public static SingletonLazy Instance { get { if (_instance == null) { lock (_lockObj) { if (_instance == null) { _instance = new SingletonLazy(); } } } return _instance; } } public void DoSomething() { Console.WriteLine("懶漢式單例模式."); } }
懶加載單例模式
如果您使用的是 .NET 4(或更高版本),可以使用Lazy類來實(shí)現(xiàn)線程安全的懶加載單例模式。
/// <summary> /// 懶加載單例模式 /// </summary> public sealed class SingletonByLazy { private static readonly Lazy<SingletonByLazy> _lazy = new Lazy<SingletonByLazy>(() => new SingletonByLazy()); public static SingletonByLazy Instance { get { return _lazy.Value; } } private SingletonByLazy() { } public void DoSomething() { Console.WriteLine("懶加載單例模式."); } }
到此這篇關(guān)于C# 單例模式的多種實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# 單例模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明
這篇文章主要介紹了C#實(shí)現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境詳解
這篇文章主要給大家介紹了關(guān)于如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題
這篇文章主要介紹了C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體
這篇文章主要為大家介紹了Winform?控件優(yōu)化LayeredWindow實(shí)現(xiàn)無鋸齒圓角窗體示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Unity的AssetPostprocessor?Model動(dòng)畫函數(shù)使用案例深究
這篇文章主要介紹了Unity的AssetPostprocessor?Model動(dòng)畫函數(shù)使用案例的深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08