机房重构—单例模式

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

 

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

 

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

 

结构图:

 

机房重构中,当用到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()


显示的结果:

 

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

 

C++本科毕业设计-ROS机械臂上位机源码(下载即用),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值