亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#設計模式之單例模式實例講解

2020-01-24 02:19:49
字體:
來源:轉載
供稿:網友

前言

最近開始花點心思研究下設計模式,主要還是讓自己寫的代碼可重用性高、保證代碼可靠性。所謂設計模式,我找了下定義:是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。毫無疑問,設計模式于己于他人于系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

為什么要提倡“Design Pattern(設計模式)”?

根本原因是為了代碼復用,增加可維護性。因此這次我們來學習下設計模式,最后會通過C#語言來實現這些設計模式作為例子,深刻理解其中的精髓。

定義

單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數的控制并節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。

特點

1、 某個類只能有一個實例
2、它必須自行創建這個實例
3、它必須自行向整個系統提供這個實例。

優缺點

優點:

一、實例控制

單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。

二、靈活性

因為類控制了實例化過程,所以類可以靈活更改實例化過程。

缺點:

一、開銷

雖然數量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。

二、可能的開發混淆

使用單例對象(尤其在類庫中定義的對象)時,開發人員必須記住自己不能使用new關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發人員可能會意外發現自己無法直接實例化此類。

三、對象生存期

不能解決刪除單個對象的問題。在提供內存管理的語言中(例如基于.NET Framework的語言),只有單例類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除對象實例,但這樣會導致單例類中出現懸浮引用。

復制代碼 代碼如下:

/// <summary>
    /// 單例模式
    /// </summary>
    public class Singleton
    {
        // 定義一個靜態變量來保存類的實例
        private static Singleton mySingleton;

        // 定義私有構造函數,使外界不能創建該類實例
        private Singleton()
        {
        }

        //定義公有方法提供一個全局訪問點。
        public static Singleton GetInstance()
        {
            //這里的lock其實使用的原理可以用一個詞語來概括“互斥”這個概念也是操作系統的精髓
            //其實就是當一個進程進來訪問的時候,其他進程便先掛起狀態
            if (mySingleton == null)
            {
                mySingleton = new Singleton();
            }
            return mySingleton;
        }
    }

上面的單例模式的實現是有問題的,當多個用戶或者方法同時訪問的時候,便會出現多個用戶同時拿到了mySingleton==null的結果,這個明顯不是我們想要的,因此,我們應該通過一個鎖來互斥這個方法,當很多線程同時訪問的時候,只允許一個線程進入到代碼中執行,而其他的便只能處于掛起的狀態。

復制代碼 代碼如下:

/// <summary>
    /// 單例模式
    /// </summary>
    public class Singleton
    {
        // 定義一個靜態變量來保存類的實例
        private static Singleton mySingleton;

        // 定義一個標識確保線程同步
        private static readonly object locker = new object();


        // 定義私有構造函數,使外界不能創建該類實例
        private Singleton()
        {
        }

        //定義公有方法提供一個全局訪問點。
        public static Singleton GetInstance()
        {
            //這里的lock其實使用的原理可以用一個詞語來概括“互斥”這個概念也是操作系統的精髓
            //其實就是當一個進程進來訪問的時候,其他進程便先掛起狀態
            if (mySingleton == null)//區別就在這里
            {
                lock (locker)
                {
                    // 如果類的實例不存在則創建,否則直接返回
                    if (mySingleton == null)
                    {
                        mySingleton = new Singleton();
                    }
                }
            }
            return mySingleton;
        }
    }

其實在一些項目中,單例模式早就有了體現。在開發asp.net的項目中,就已經用這種方法來包裝http上下文來實現計算機資源的節省。

復制代碼 代碼如下:

/// <summary>
        /// 業務倉儲
        /// </summary>
        public IBLL.IBLLSession BLLSession;

        //---------------------定義上下文屬性
        #region 實例構造函數 初始化業務倉儲 + OperateContext()
        public OperateContext()
        {
            BLLSession = DI.SpringHelper.GetObject<IBLL.IBLLSession>("BLLSession");
        }
        #endregion

        #region Http上下文 以及相關屬性
        /// <summary>
        /// Http上下文
        /// </summary>
        HttpContext ContextHttp
        {
            get
            {
                return HttpContext.Current;
            }
        }

        HttpResponse Response
        {
            get
            {
                return ContextHttp.Response;
            }
        }
        HttpRequest Request
        {
            get
            {
                return ContextHttp.Request;
            }
        }
        HttpSessionState Session
        {
            get
            {
                return ContextHttp.Session;
            }
        }
        #endregion

        #region 獲取當前操作上下文(存在線程中,提高效率) + OperateContext Current
        // <summary>
        /// 獲取當前操作上下文(存在線程中,提高效率)
        /// </summary>
        public static OperateContext Current
        {
            get
            {
                OperateContext o = CallContext.GetData(typeof(OperateContext).Name) as OperateContext;
                if (o == null)
                {
                    o = new OperateContext();
                    CallContext.SetData(typeof(OperateContext).Name, o);
                }
                return o;
            }
        }
        #endregion

總結

到這里,就和大家一起先了解了單例模式到底是個什么東西,其實在一些項目中,這種模式就已經應用了,只是我們沒有去發現和總結,不過本來設計模式就是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。哎。。。。這次是第二次編輯了,本來這個單例模式已經發布了好多天,竟然被我新的一篇觀察者模式給覆蓋了,數據取不回來,只能匆匆完稿,大家見諒啊,有問題我們一起來討論,畢竟我也是初學者。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性猛交xxxx乱大交| 精品亚洲aⅴ在线观看| 欧美黑人巨大xxx极品| 亚洲娇小xxxx欧美娇小| 一本一本久久a久久精品牛牛影视| 成人写真视频福利网| 国产精品偷伦视频免费观看国产| 精品视频久久久久久| 国产精品一区二区三区在线播放| 欧美午夜激情在线| 久久国产精品首页| 国产一区二区三区日韩欧美| 在线色欧美三级视频| 久久影院免费观看| 亚洲精品动漫100p| 亚洲区在线播放| 欧美猛男性生活免费| 亚洲欧洲国产精品| 性欧美亚洲xxxx乳在线观看| 尤物tv国产一区| 国产精品久久久久av免费| 国产精品视频一区二区高潮| 欧美黑人视频一区| 欧美性生交大片免网| 欧美日韩免费一区| 国产精品一区二区女厕厕| 日韩欧美成人精品| 夜夜嗨av色综合久久久综合网| 性色av一区二区三区免费| 日本精品视频在线| 成人午夜一级二级三级| 欧美大片在线看免费观看| 亚洲成人免费在线视频| 欧美日本精品在线| 亚洲精品999| 亚洲人成网站在线播| 欧美巨大黑人极品精男| 亚洲精品videossex少妇| 日韩电影免费在线观看| 亚洲xxxxx性| 一本色道久久88综合亚洲精品ⅰ| 国产成人精品免费视频| 亚洲国产精品小视频| 九九精品在线观看| 国产精品影院在线观看| 国语自产在线不卡| 日韩精品视频免费专区在线播放| 亚洲国产欧美一区二区丝袜黑人| 日本19禁啪啪免费观看www| 美女福利精品视频| 欧美一区二区视频97| 欧美电影免费观看网站| 欧美最顶级的aⅴ艳星| 日韩激情片免费| 久久久精品免费视频| 国产成人免费av| 欧美亚洲激情视频| 2018中文字幕一区二区三区| 国产精品xxx视频| 久久午夜a级毛片| 色婷婷综合久久久久| 久久久爽爽爽美女图片| 亚洲免费电影一区| 久久久www成人免费精品张筱雨| 欧美国产日本在线| 欧美丰满片xxx777| 亚洲精品视频二区| 亚洲区一区二区| 日韩在线观看免费全| 黄色成人在线播放| 久久成人亚洲精品| 青草成人免费视频| 成人在线播放av| 欧美日韩另类在线| 亚洲xxxx妇黄裸体| 久久精品视频va| 97av在线视频| 国产在线a不卡| 国产精品一区二区3区| 亚洲欧美成人网| 欧美极品美女电影一区| 黑人与娇小精品av专区| 色婷婷成人综合| 国产一区二区日韩| 久久成人精品一区二区三区| 日韩欧美国产黄色| 国产成人精品一区二区三区| 亚洲第一页自拍| 国产日本欧美一区二区三区| 国产精品高潮呻吟久久av野狼| 亚洲天堂男人天堂女人天堂| 欧美一级视频一区二区| 亚洲精品91美女久久久久久久| 久久精品视频网站| 亚洲天堂一区二区三区| 最新69国产成人精品视频免费| 欧美亚洲另类视频| 国产一区二区三区在线免费观看| 亚洲成色777777在线观看影院| 国产精品高潮呻吟视频| 亚洲人成电影在线观看天堂色| 国产视频久久久久久久| 久久久噜久噜久久综合| 欧美日韩视频免费播放| 国产精品毛片a∨一区二区三区|国| 午夜精品久久久久久久男人的天堂| 日韩视频中文字幕| 91热福利电影| 日韩麻豆第一页| 国产91ⅴ在线精品免费观看| 成人网欧美在线视频| 亚洲一区亚洲二区亚洲三区| 欧美亚洲另类激情另类| 国产精品日韩电影| 国产一区二区三区直播精品电影| 精品在线观看国产| 欧美激情高清视频| 国产精品久久久久久久9999| 亚洲999一在线观看www| 亚洲精品在线不卡| 欧美韩国理论所午夜片917电影| 欧美一区二区三区……| 亚洲国产成人精品久久| 久久91亚洲精品中文字幕奶水| 91超碰中文字幕久久精品| 亚洲午夜未满十八勿入免费观看全集| 欧美日韩国产一区在线| 欧美一级大片在线免费观看| 色与欲影视天天看综合网| 久久艹在线视频| 欧美精品一区二区三区国产精品| 国产精品成人va在线观看| 亚洲三级免费看| 国产精品网红直播| 青青青国产精品一区二区| 国产精品久久久久久久久久新婚| 欧美一级黄色网| 欧美丝袜一区二区三区| 国产精品高清在线观看| 在线电影欧美日韩一区二区私密| 国产精品自产拍高潮在线观看| 自拍偷拍亚洲精品| 欧美成人手机在线| 91精品久久久久久久久| 国产精品69久久| 亚洲网站在线看| 国产精品劲爆视频| 在线观看日韩av| 色伦专区97中文字幕| 亚洲最大福利视频网站| 久久视频国产精品免费视频在线| 成人国产精品久久久| 欧美综合一区第一页| 国产精品久久久久久久久久东京| 国产成人亚洲综合青青| 欧美中文字幕精品| 欧美成人在线网站| 精品国内亚洲在观看18黄| 久久人人看视频| 欧美一区二区三区……| 91免费人成网站在线观看18| 久久在线精品视频| 色综合五月天导航| 97精品视频在线观看|