在.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,確保當一個線程位於代碼的臨界區時,另一個線程不進入臨界區,其他線程試圖進入鎖定的代碼,它經一直等待(即被阻止),直到該對象被釋放。
單例模式分為兩種用法:餓汗式單例類和懶漢式單例類餓漢式單例類是當靜態初始化的方式是在自己被載入時就可將自己執行個體化;懶漢式是在第一次被引用時,才會將自己執行個體化。具體用法根據實際的需求來判斷,從而來保證資料的安全。
設計模式的使用很大程度上提高了我們的程式的執行效率和最佳化了我們的代碼。其他設計模式繼續要求中……