标签:style class blog code http tar
重构机房的时候用到了单例模式,在这里稍稍回顾一下。
单例模式,顾名思义就是一个类只有一个实例,在机房收费系统中,主要是才子窗体实例化的时候用到。如果没有使用单例模式时代码是这样的:
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
五、使用后效果如下
标签:style class blog code http tar
原文地址:http://blog.csdn.net/zjx86320/article/details/33375833