什么是.Net單例模式-創(chuàng)新互聯(lián)

這篇文章主要介紹“什么是.Net單例模式”,在日常操作中,相信很多人在什么是.Net單例模式問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”什么是.Net單例模式”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),伊吾網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:伊吾等地區(qū)。伊吾做網(wǎng)站價(jià)格咨詢(xún):18980820575

每臺(tái)計(jì)算機(jī)可以有若干個(gè)打印機(jī),但只能有一個(gè)Printer Spooler, 以避免兩個(gè)打印作業(yè)同時(shí)輸出到打印機(jī)中。每臺(tái)計(jì)算機(jī)可以有若干傳真卡,但是只應(yīng)該有一個(gè)軟件負(fù)責(zé)管理傳真卡,以避免出現(xiàn)兩份傳真作業(yè)同時(shí)傳到傳真卡中的情況。每臺(tái)計(jì)算機(jī)可以有若干通信端口,系統(tǒng)應(yīng)當(dāng)集中管理這些通信端口,以避免一個(gè)通信端口同時(shí)被兩個(gè)請(qǐng)求同時(shí)調(diào)用。



問(wèn)題描述:

        單例模式 Singleton Pattern

問(wèn)題解決:

(1)單例模式簡(jiǎn)介:

Singleton模式要求一個(gè)類(lèi)有且僅有一個(gè)實(shí)例,并且提供了一個(gè)全局的訪問(wèn)點(diǎn)。這就提出了一個(gè)問(wèn)題:如何繞過(guò)常規(guī)的構(gòu)造器,提供一種機(jī)制來(lái)保證一個(gè)類(lèi)只有一個(gè)實(shí)例?客戶(hù)程序在調(diào)用某一個(gè)類(lèi)時(shí),它是不會(huì)考慮這個(gè)類(lèi)是否只能有一個(gè)實(shí)例等問(wèn)題的,所以,這應(yīng)該是類(lèi)設(shè)計(jì)者的責(zé)任,而不是類(lèi)使用者的責(zé)任。

單例模式特點(diǎn):

    (1.1)一個(gè)類(lèi)有且僅有一個(gè)實(shí)例

    (1.2)類(lèi)提供一個(gè)全局的訪問(wèn)點(diǎn)

        (2)單例模式的實(shí)現(xiàn):

(2.1)簡(jiǎn)單實(shí)現(xiàn):

什么是.Net單例模式

上述實(shí)現(xiàn)的優(yōu)點(diǎn):

          (1)直到對(duì)象要求時(shí),才進(jìn)行實(shí)例的初始化,這種實(shí)現(xiàn)方法稱(chēng)為:“惰性實(shí)例化”,惰性實(shí)例化,避免了程序啟動(dòng)時(shí)創(chuàng)建不必要的Singleton。

上述實(shí)現(xiàn)的缺點(diǎn):

           (1)這種實(shí)現(xiàn)對(duì)于多線程環(huán)境并不安全,可能實(shí)例化多個(gè)對(duì)象,例如可能存在兩個(gè)線程進(jìn)行instance==null的判斷,然后創(chuàng)建兩個(gè)單例對(duì)象,這就違背了單例模式的設(shè)計(jì)意圖。

    (2.2)安全的線程:

什么是.Net單例模式

以上的實(shí)現(xiàn)保證了單例對(duì)象在多線程的情況下只會(huì)創(chuàng)建一個(gè),但是padlock增加了額外的開(kāi)銷(xiāo)

    (2.3)雙重鎖定

什么是.Net單例模式

        這種實(shí)現(xiàn)方式對(duì)多線程來(lái)說(shuō)是安全的,同時(shí)線程不是每次都加鎖,只有判斷對(duì)象實(shí)例沒(méi)有被創(chuàng)建時(shí)它才加鎖,有了我們上面第一部分的里面的分析,我們知道,加鎖后還得再進(jìn)行對(duì)象是否已被創(chuàng)建的判斷。它解決了線程并發(fā)問(wèn)題,同時(shí)避免在獲取 Instance 的調(diào)用中都出現(xiàn)獨(dú)占鎖定。它還允許您將實(shí)例化延遲到第一次訪問(wèn)對(duì)象時(shí)發(fā)生。實(shí)際上,應(yīng)用程序很少需要這種類(lèi)型的實(shí)現(xiàn)。大多數(shù)情況下我們會(huì)用靜態(tài)初始化。這種方式仍然有很多缺點(diǎn):無(wú)法實(shí)現(xiàn)延遲初始化。

(2.4)靜態(tài)初始化

什么是.Net單例模式

        此實(shí)現(xiàn)中,將在第一次引用類(lèi)的任何成員創(chuàng)建實(shí)例,該類(lèi)標(biāo)記為 sealed 以阻止發(fā)生派生,而派生可能會(huì)增加實(shí)例。此外,變量標(biāo)記為 readonly,這意味著只能在靜態(tài)初始化期間(此處顯示的示例)或在類(lèi)構(gòu)造函數(shù)中分配變量。它仍然可以用來(lái)解決 Singleton 模式試圖解決的兩個(gè)基本問(wèn)題:全局訪問(wèn)和實(shí)例化控制。公共靜態(tài)屬性為訪問(wèn)實(shí)例提供了一個(gè)全局訪問(wèn)點(diǎn)。此外,由于構(gòu)造函數(shù)是私有的,因此不能在類(lèi)本身以外實(shí)例化 Singleton 類(lèi);因此,變量引用的是可以在系統(tǒng)中存在的的實(shí)例。

由于 Singleton 實(shí)例被私有靜態(tài)成員變量引用,因此在類(lèi)首次被對(duì) Instance 屬性的調(diào)用所引用之前,不會(huì)發(fā)生實(shí)例化。這種方法的潛在缺點(diǎn)是,您對(duì)實(shí)例化機(jī)制的控制權(quán)較少。在 Design Patterns 形式中,您能夠在實(shí)例化之前使用非默認(rèn)的構(gòu)造函數(shù)或執(zhí)行其他任務(wù)。由于在此解決方案中由 .NET Framework 負(fù)責(zé)執(zhí)行初始化,因此您沒(méi)有這些選項(xiàng)。在大多數(shù)情況下,靜態(tài)初始化是在 .NET 中實(shí)現(xiàn) Singleton 的選方法。

     (2.5)延遲初始化:

什么是.Net單例模式

        (3)單例模式的優(yōu)缺點(diǎn):

什么是.Net單例模式

        (4)單例模式適用情況和應(yīng)用場(chǎng)景:

什么是.Net單例模式

到此,關(guān)于“什么是.Net單例模式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)頁(yè)名稱(chēng):什么是.Net單例模式-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article18/dhgdgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站策劃、企業(yè)建站、小程序開(kāi)發(fā)、微信小程序全網(wǎng)營(yíng)銷(xiāo)推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)