单例模式

来源:互联网 发布:台服手游哪个软件下载 编辑:程序博客网 时间:2024/06/05 18:06

        重构机房的时候用到了单例模式,在这里稍稍回顾一下。

        单例模式,顾名思义就是一个类只有一个实例,在机房收费系统中,主要是才子窗体实例化的时候用到。如果没有使用单例模式时代码是这样的:        

    Private Sub 修改密码ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 修改密码ToolStripMenuItem.Click        Dim frm_ChangePWD As New frmChangePWD        frm_ChangePWD.MdiParent = Me        frm_ChangePWD.Show()            End Sub
              显示结果如下:

        

        这很显然是不符合要求的,那么怎么才能单击菜单的时候只实例化一个窗体呢?这就用到了单例模式。

        一、模式定义

        单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。

        单例模式的要点有三个:

        ①是某个类只能有一个实例;

        ②是它必须自行创建这个实例;

        ③是它必须自行向整个系统提供这个实例

        二、模式结构

        

        三、模式分析

        单例模式的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的角色只有一个,就是单例类。

        私有构造函数:确保用户无法通过new关键字直接实例化它。

        静态私有成员变量:类自身的一个成员类。

        静态公有的工厂方法:负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。

        四、实现代码        

    Private Shared frm_ChangePWD As frmChangePWD  ’静态私有成员变量    Private Sub New()'私有构造函数        ' 此调用是设计器所必需的。        InitializeComponent()        ' 在 InitializeComponent() 调用之后添加任何初始化。    End Sub    Public Shared Function GetInstance() As frmChangePWD’静态公有工厂方法,返回唯一实例        If frm_ChangePWD Is Nothing OrElse frm_ChangePWD.IsDisposed Then'注意这里使用OrElse而不是or            frm_ChangePWD = New frmChangePWD()            frm_ChangePWD.MdiParent = frmMain        End If        Return frm_ChangePWD    End Function

              

        客户端调用代码:        

Private Sub 修改密码ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 修改密码ToolStripMenuItem.Click        '直接调用GetInstance方法即可        frmChangePWD.GetInstance.Show()    End Sub
     

           五、使用后效果如下

         



3 0
原创粉丝点击