程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> .Net 單例模式(Singleton)

.Net 單例模式(Singleton)

編輯:關於ASP.NET
    單例模式的意思就是只有一個實例。單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。這個類稱為單例類   每台計算機可以有若干個打印機,但只能有一個Printer Spooler, 以避免兩個打印作業同時輸出到打印機中。每台計算機可以有若干傳真卡,但是只應該有一個軟件負責管理傳真卡,以避免出現兩份傳真作業同時傳到傳真卡中的情 況。每台計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。

    問題描述:

            單例模式 Singleton Pattern

    問題解決:

    (1)單例模式簡介:

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

    單例模式特點:

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

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

            (2)單例模式的實現:

    (2.1)簡單實現:

    clipboard

    上述實現的優點:

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

    上述實現的缺點:

               (1)這種實現對於多線程環境並不安全,可能實例化多個對象,例如可能存在兩個線程進行instance==null的判斷,然後創建兩個單例對象,這就違背了單例模式的設計意圖。

        (2.2)安全的線程:

    clipboard

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

        (2.3)雙重鎖定

    clipboard

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

    (2.4)靜態初始化

    clipboard

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

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

         (2.5)延遲初始化:

    clipboard

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

    clipboard

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

    clipboard

            (5)具體實例:

    總結:

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

     
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved