单例模式
单例模式是一个比較简单的模式,其定义例如以下:
确保某一个类仅仅有一个实例。并且自行实例化并向整个系统提供这个实例。
通用类图
通用代码
<span style="font-size:18px;">Public Class Singleton
Private sing = New Singleton
'限制产生多个对象
Private Singleton()
'通过该方法获得实例对象
Public Function getSingleton() As Singleton
Return sing
End Function
'类中其它方法,尽量是Static
Public Sub dosomething()
End Sub
End Class
</span>
单例模式的长处
1.因为单例模式在内存中仅仅有一个实例,因此降低了内存开支。特别是一个对象须要频繁的创建、销毁时。并且创建或销毁时性能又无法优化。
2.单例模式能够在系统设置全局的訪问点,优化和共享资源訪问。
3.单例模式能够避免对资源的多重占用。
缺点:
单例模式一般没有接口。扩展非常困难,若要扩展,除了改动代码没有另外一种途径。当然在特殊状况下。单例模式能够实现接口、被继承等
使用场景
A.要求生成一个唯一序列号的环境
B.创建一个对象须要消耗的资源过多。如要訪问数据库等资源
C.须要定义大量的静态常量和静态方法的环境,能够採用单例模式。
牛刀小试
本人在做机房收费系统的时候,就遇到了下面困扰,当点击显示某个窗口的时候,会一直的显示,因此就能够通过单例模式来组织此操作实现(当让也也有其它方法做推断来实现该操作)
如上图,当点击显示某个窗口的时候。一直不断的实例化窗口。因此能够考虑使用单例模式。
代码例如以下:
<span style="font-size:18px;">Public Class frmRegister
'一个实例化的參数。类型为该窗口
Private Shared m_frmRegister As frmRegister = Nothing
''' <summary>
''' 该方法用来通过单例模式来实例化窗口
''' </summary>
''' <returns>frmCheckOnlineInfo 返回要调用的窗口</returns>
''' <remarks></remarks>
Public Function getfrmRegister() As frmRegister
'在调用此方法来实例化该类时,做推断。看是否窗口已关闭
If m_frmRegister Is Nothing OrElse m_frmRegister.IsDisposed Then
m_frmRegister = New frmRegister '若关闭,则实例化该窗口
End If
Return m_frmRegister
End Function
End Class</span>
在以后使用的时候 。仅仅需调用一次就可以。例如以下:
<span style="font-size:18px;"> Private Sub menuRegister_Click(sender As Object, e As EventArgs) Handles menuRegister.Click
frmRegister.getfrmRegister.MdiParent = Me
frmRegister.getfrmRegister.Show() '通过该方法实例化该窗口类
End Sub</span>
小结:模式来源于生活,所以仅仅有把模式生活化,多多实践才干更好的理解各个模式,也可以从生活中抽象出很多其它的模式。
浙公网安备 33010602011771号