單例模式的運用-保證執行個體化一個抽象工廠

來源:互聯網
上載者:User

        在.NET個人版機房收費系統中,例如表單的執行個體化產生、B層中的類調用抽象工廠來執行個體化工廠類(來建立借口的過程)、SqlHelper的調用等等,個人版裡面調用抽象工廠都是每次需要調用抽象工廠時就會執行個體化一次,例如:

Dim factory As New DBFactory '執行個體化工廠變數        Dim IsBoolean As Boolean        Dim iUser As IUser = factory.CreateUser() '調用工廠來建立介面

 

       這樣做從功能實現角度來看沒有問題,但是從記憶體的使用角度來說,每執行個體化一次就需要記憶體為其分配一塊記憶體空間,在這個程式運行過程當中可能需要調用工廠來建立借口,這樣相同的類,我們過多的執行個體化不僅浪費了記憶體空間,來降低了程式的整體的執行效率,

     由於學習過設計模式後來考慮到使用單例的模式可以解決這個問題即:保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。

 

加上單例模式後代碼:

Private Shared instance As DBFactory                 '定義一個靜態FactoryDataBase對象    Private Shared ReadOnly padlock As New Object()    '定義靜態唯讀object對象    Private Sub New() '私人的構造方法    End Sub    '執行個體化方法    Public Shared Function GetInstance() As DBFactory        '雙重鎖定,防治多線程執行個體化同一個對象        If IsNothing(instance) Then            SyncLock padlock                If IsNothing(instance) Then                    instance = New DBFactory()                End If            End SyncLock        End If        Return instance    End Function

        單例模式雖然可以保證一個類執行個體化一個對象但是這個類如果在多線程的情況下很可能出現多個執行個體化對象,所以我們加入Lock,確保當一個線程位於代碼的臨界區時,另一個線程不進入臨界區,其他線程試圖進入鎖定的代碼,它經一直等待(即被阻止),直到該對象被釋放。

 

       單例模式分為兩種用法:餓汗式單例類和懶漢式單例類餓漢式單例類是當靜態初始化的方式是在自己被載入時就可將自己執行個體化;懶漢式是在第一次被引用時,才會將自己執行個體化。具體用法根據實際的需求來判斷,從而來保證資料的安全。

    

       設計模式的使用很大程度上提高了我們的程式的執行效率和最佳化了我們的代碼。其他設計模式繼續要求中……

   


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.