机房重构—单例模式

单例模式确保类只有一个实例,并提供全局访问点。在机房重构特别是使用MDI窗体时,防止子窗体多次实例化是关键。通过修改窗体代码,利用单例模式,可以避免重复打开充值窗口的问题,实现窗体的正确管理和唯一访问。
摘要由CSDN通过智能技术生成

定义:保证一个类仅有一个实例并提供一个访问它的全局访问点。

 

解释:通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问实例的方法。

 

特点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

 

优点:单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。因为类控制了实例化过程,所以类可以灵活更改实例化过程。

 

结构图:

 

机房重构中,当用到MDI窗体时,需要用到单例模式来防止多次实例化子窗体。

 

当你在frmMain中充值Click事件中,写下面的代码:

Dim NewMDIRecharge As New frmRecharge   '实例化一个新的充值的窗体
        NewMDIRecharge.MdiParent = Me     '定义父窗体为frmMain
        NewMDIRecharge.Show()     '显示刚定义的窗体


当你多次点击充值时,你会出现这种情况:

 

这时,你需要单例模式来解决这个问题。

 

现在在frmRecharge窗体中加入以下代码:

 

Private Shared Recharge As frmRecharge = Nothing   '声明一个共享的类变量Recharge
    '该frmRecharge类的构造函数
    Private Sub New()
        ' 此调用是设计器所必需的。
        InitializeComponent()
        ' 在 InitializeComponent() 调用之后添加任何初始化。
    End Sub
    '写一个公有的方法来检验这个类是否初始化以及被释放过
    Public Shared Function GetInstance() As frmRecharge
        If Recharge Is Nothing OrElse Recharge.IsDisposed Then
            Recharge = New frm Recharge
            Recharge.MdiParent = frmMain.ActiveForm
        End If
        Return Recharge  '把新的窗体返回出来
    End Function


然后回到frmMain中,重新写入下面代码:

Dim NewMDIRecharge As New frmRecharge   '实例化一个新的充值的窗体
        NewMDIRecharge.MdiParent = Me     '定义父窗体为frmMain
        'NewMDIModifyPassword.Show()     '显示刚定义的窗体
        frmRecharge.GetInstance.Show()


显示的结果:

 

当你现在在多次点击充值时,他就不会再出现多次实例化窗体的情况了。

 

评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值