一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - .Net 單例模式(Singleton)

.Net 單例模式(Singleton)

2019-11-13 11:27asp.net教程網(wǎng) ASP.NET教程

單例模式的意思就是只有一個(gè)實(shí)例。單例模式確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。這個(gè)類稱為單例類

每臺(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)用。

問題描述:

單例模式 Singleton Pattern

問題解決:

(1)單例模式簡介:

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

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

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

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

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

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

.Net 單例模式(Singleton)

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

(1)直到對(duì)象要求時(shí),才進(jìn)行實(shí)例的初始化,這種實(shí)現(xiàn)方法稱為:“惰性實(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 單例模式(Singleton)

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

(2.3)雙重鎖定

.Net 單例模式(Singleton)

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

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

.Net 單例模式(Singleton)

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

由于 Singleton 實(shí)例被私有靜態(tà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í)行初始化,因此您沒有這些選項(xiàng)。在大多數(shù)情況下,靜態(tài)初始化是在 .NET 中實(shí)現(xiàn) Singleton 的首選方法。

(2.5)延遲初始化:

.Net 單例模式(Singleton)

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

.Net 單例模式(Singleton)

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

.Net 單例模式(Singleton)

(5)具體實(shí)例:

總結(jié):

Singleton設(shè)計(jì)模式是一個(gè)非常有用的機(jī)制,可用于在面向?qū)ο蟮膽?yīng)用程序中提供單個(gè)訪問點(diǎn)。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美xxxxxbb| 被老外操 | 香蕉久久夜色精品国产小优 | 欧美国产影院 | 网红刘婷hd国产高清 | 久久久久青草大香线综合精品 | 欧美成人午夜片一一在线观看 | 成人特级毛片69免费观看 | 天堂素人在线 | 亚洲激情 欧美 | 亚洲玖玖| 明星梦淫 | 91精品国产91热久久p | 免费国产白棉袜踩踏区域 | 日本十大顶级绝伦推理片 | 俄罗斯美女大逼 | 男人把大ji巴放进男人免费视频 | 久久婷婷五月综合色丁香花 | 天天操天天射天天色 | 日本国产一区二区三区 | 图片专区小说专区卡通动漫 | 国产无套在线播放 | 免费超级乱淫视频播放性 | 99精品国产美女福到在线不卡 | 幻女free性zoz0交 | 饭冈加奈子在线播放观看 | 日本人护士免费xxxx视频 | 日本十大顶级绝伦推理片 | 蜜桃成熟时1997在线看免费看 | 国产欧美一区二区精品久久久 | 国产成人综合网 | 98精品视频| 99爱在线精品视频免费观看9 | 大象传媒2021秘密入口 | 欧美一区二区三区四区在线观看 | 国产色图片| 97青草香蕉依人在线播放 | 国产九九在线观看播放 | 亚洲区精品久久一区二区三区 | 99视频一区 | 久久国产主播福利在线 |