单例模式的运用-保证实例化一个抽象工厂

        在.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,确保当一个线程位于代码的临界区时,另一个线程不进入临界区,其他线程试图进入锁定的代码,它经一直等待(即被阻止),直到该对象被释放。

 

       单例模式分为两种用法:饿汗式单例类和懒汉式单例类饿汉式单例类是当静态初始化的方式是在自己被加载时就可将自己实例化;懒汉式是在第一次被引用时,才会将自己实例化。具体用法根据实际的需求来判断,从而来保证数据的安全。

    

       设计模式的使用很大程度上提高了我们的程序的执行效率和优化了我们的代码。其他设计模式继续要求中……

   


 

你可能感兴趣的:(单例模式的运用-保证实例化一个抽象工厂)