濮阳杆衣贸易有限公司

主頁 > 知識庫 > .Net 單例模式(Singleton)

.Net 單例模式(Singleton)

熱門標簽:手機地圖標注如何刪除 外呼系統(tǒng)費用一年 辦理400電話證件 世紀佳緣地圖標注怎么去掉 怎么給超市做地圖標注入駐店 寧波自動外呼系統(tǒng)代理 外呼系統(tǒng)代理品牌 巫師3為什么地圖標注的財寶沒有 十堰正規(guī)電銷機器人系統(tǒng)
每臺計算機可以有若干個打印機,但只能有一個Printer Spooler, 以避免兩個打印作業(yè)同時輸出到打印機中。每臺計算機可以有若干傳真卡,但是只應該有一個軟件負責管理傳真卡,以避免出現(xiàn)兩份傳真作業(yè)同時傳到傳真卡中的情況。每臺計算機可以有若干通信端口,系統(tǒng)應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。

問題描述:

        單例模式 Singleton Pattern

問題解決:

(1)單例模式簡介:

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

單例模式特點:

    (1.1)一個類有且僅有一個實例

    (1.2)類提供一個全局的訪問點

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

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

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

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

上述實現(xiàn)的缺點:

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

    (2.2)安全的線程:

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

    (2.3)雙重鎖定

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

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

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

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

     (2.5)延遲初始化:

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

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

        (5)具體實例:

總結:

        Singleton設計模式是一個非常有用的機制,可用于在面向對象的應用程序中提供單個訪問點。

您可能感興趣的文章:
  • 五種單件模式之Singleton的實現(xiàn)方法詳解
  • 基于靜態(tài)Singleton模式的使用介紹
  • C#多線程Singleton(單件)模式模板
  • php設計模式 Singleton(單例模式)
  • javascript 單例/單體模式(Singleton)
  • .NET c# 單體模式(Singleton)
  • Python設計模式之單例模式實例
  • Python設計模式之觀察者模式實例
  • Python設計模式之代理模式實例
  • python中getattr函數使用方法 getattr實現(xiàn)工廠模式
  • Windows 配置Apache以便在瀏覽器中運行Python script的CGI模式
  • Python下singleton模式的實現(xiàn)方法

標簽:山西 景德鎮(zhèn) 嘉興 平涼 通遼 牡丹江 天門 泰州

巨人網絡通訊聲明:本文標題《.Net 單例模式(Singleton)》,本文關鍵詞  .Net,單例,模式,Singleton,.Net,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《.Net 單例模式(Singleton)》相關的同類信息!
  • 本頁收集關于.Net 單例模式(Singleton)的相關信息資訊供網民參考!
  • 推薦文章
    彭山县| 呼图壁县| 延边| 饶平县| 安顺市| 常山县| 延长县| 石阡县| 井冈山市| 西藏| 中山市| 庐江县| 灵台县| 道孚县| 合山市| 达孜县| 余干县| 清水县| 巍山| 绥江县| 宜丰县| 曲阳县| 黄平县| 镇平县| 安溪县| 华坪县| 梧州市| 年辖:市辖区| 集贤县| 修水县| 洛南县| 通州市| 廉江市| 舞阳县| 加查县| 巴里| 禹州市| 香格里拉县| 唐海县| 南投市| 盐山县|