标签:style class blog c code tar
单例模式是一个比较简单的模式,其定义如下:
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
通用类图
通用代码
<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>
小结:模式来源于生活,所以只有把模式生活化,多多实践才能更好的理解各个模式,也能够从生活中抽象出更多的模式。
标签:style class blog c code tar
原文地址:http://blog.csdn.net/luckyzhoustar/article/details/26871767