VB.NET“独一无二”之单例模式

前端之家收集整理的这篇文章主要介绍了VB.NET“独一无二”之单例模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在进行代码设计的过程中经常会出现同一个窗体会被实例化多次从而重复出现的问题,同一个窗体多次被实例化不但影响着软件的人性化使用而且由于每实例化一次都会占用一部分内存空间,这样对内存资源的浪费也是比较严重的,如何解决这个问题?这就需要在代码设计阶段利用单例模式进行窗体的数量控制。单例模式最主要的作用是剥夺了外部类实例化本窗体的权力,也就是外部类不能通过new方法来实例化本窗体。但应该怎样实现呢?其实方法很简单:

1.通过定义private方法禁止外部类实例化本窗体。

众所周知所有的窗体都有自己的默认构造方法,即在不自定义窗体构造方法前提下系统会自动生成一个窗体的默认构造方法,也就是窗体默认new方法,在VB.NET中方法如下:

Public Sub New()
' 此调用是设计器所必需的。


InitializeComponent()


' 在 InitializeComponent() 调用之后添加任何初始化。

End Sub

大家注意红色的public,也就是由于这个关键字的存在使得外部类可以轻易而重复的实例化这个窗体,所有要杜绝外部类对该窗体的实例化权力,首先要将该过程(或称该方法)变为外部类不能调用的,即把public关键字改变为private,这样外部类便再无权new该窗体。但是问题又来了,窗体总是要在别的类(这里可以窗体为例)调用的情况下才出现的,将new方法变为private后要怎样实例化该窗体呢,且看下一步。

2.自定义public方法实例化本窗体。

虽然外部类无权调用本窗体的new方法来实例化本窗体,但是别忘了一点,在同一类中的方法却可以调用该类的其他方法,无论该方法是public还是private。也正是这一点,我们完全可以在本窗体代码自定义一个方法GetInstance()来实例化本窗体,代码如下:

Private Shared instance As frmWorkLogInfo
Public Shared Function GetInstance() As frmWorkLogInfo
If instance Is Nothing Then
instance = New frmWorkLogInfo
Else
If instance.IsDisposed Then
instance = New frmWorkLogInfo
End If
End If
Return instance

End Function

对上面代码的解释为:当该函数调用时,如果该窗体没有被实例化过则实例化一个窗体,如果该窗体被实例化过,但是已经被处理过(即被已经被关闭)则当调用方法时仍然实例化一个该窗体。除此两种情况外均不能实例化该窗体。由于GetInstance()方法是public的,所以可以被别的类方法调用由于GetInstance()方法与new()方法处于同一类中,所以尽管new()方法为private方法,但仍可以被GetInstance()方法调用)。该窗体在外类中实例化代码即:

dim frmWorkLogInfo as frmWorkLogInfo

frmWorkLogInfo.GetInstance().Show()

这样便可使窗体在整个运行过程中只保持一个“真身”,不会再有第二个。

猜你在找的VB相关文章