欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#?單例模式的多種實(shí)現(xiàn)方式

 更新時(shí)間:2024年11月07日 08:53:35   作者:追逐時(shí)光者  
單例模式是一種確保類只有一個(gè)實(shí)例的設(shè)計(jì)模式,主要用于提供全局訪問點(diǎn),C#中實(shí)現(xiàn)單例的方法多樣,包括餓漢式和懶漢式,各有優(yōu)缺點(diǎn),此外,單例模式不僅提高代碼可重用性和可讀性,還增強(qiáng)了系統(tǒng)的可維護(hù)性

單例模式介紹

單例模式是一種創(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)保存及 跨域上傳說明

    這篇文章主要介紹了C#實(shí)現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • 如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境詳解

    如何使用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-11
  • 一文詳解C#中方法重載的底層玩法

    一文詳解C#中方法重載的底層玩法

    最近在看C++的方法重載,就在想C#中的重載底層是怎么玩的。畢竟很多朋友應(yīng)該知道C是不支持重載的。本文將來詳細(xì)講講C#中方法重載的底層玩法,感興趣的可以了解一下<BR>
    2022-06-06
  • C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題

    C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題

    這篇文章主要介紹了C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    這篇文章主要為大家介紹了Winform?控件優(yōu)化LayeredWindow實(shí)現(xiàn)無鋸齒圓角窗體示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C#的編碼規(guī)范詳細(xì)說明

    C#的編碼規(guī)范詳細(xì)說明

    編碼規(guī)范是老生常談的問題,現(xiàn)在再看代碼規(guī)范可能不會(huì)再去在意變量,控件的命名方法等,而是更加關(guān)注代碼的實(shí)用性
    2013-08-08
  • C#圖片添加水印的實(shí)現(xiàn)代碼

    C#圖片添加水印的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C#給圖片添加水印的實(shí)現(xiàn)代碼,不僅可以為圖片加文字水印,還可以判斷是否是圖片文件,感興趣的小伙伴們可以參考一下
    2016-02-02
  • WPF下如何自定義MessageBox消息提示

    WPF下如何自定義MessageBox消息提示

    這篇文章主要介紹了WPF下如何自定義MessageBox消息提示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Unity的AssetPostprocessor?Model動(dòng)畫函數(shù)使用案例深究

    Unity的AssetPostprocessor?Model動(dòng)畫函數(shù)使用案例深究

    這篇文章主要介紹了Unity的AssetPostprocessor?Model動(dòng)畫函數(shù)使用案例的深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Unity2D實(shí)現(xiàn)游戲回旋鏢

    Unity2D實(shí)現(xiàn)游戲回旋鏢

    這篇文章主要為大家詳細(xì)介紹了Unity2D實(shí)現(xiàn)游戲回旋鏢,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論