单例模式

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

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

    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
               显示结果如下:

        单例模式_第1张图片

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

        一、模式定义

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

        单例模式的要点有三个:

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

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

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

        二、模式结构

        单例模式_第2张图片

        三、模式分析

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

        私有构造函数:确保用户无法通过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
     

           五、使用后效果如下

         



你可能感兴趣的:(单例模式)