码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2014-05-25 18:13:41      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   tar   



单例模式是一个比较简单的模式,其定义如下:

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

 通用类图

bubuko.com,布布扣


通用代码

<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.需要定义大量的静态常量和静态方法的环境,可以采用单例模式。

 

牛刀小试

本人在做机房收费系统的时候,就遇到了以下困扰,当点击显示某个窗体的时候,会一直的显示,因此就可以通过单例模式来组织此操作实现(当让也也有其他方法做判断来实现该操作)

bubuko.com,布布扣


如上图,当点击显示某个窗体的时候,一直不断的实例化窗体,因此可以考虑使用单例模式。

代码如下:

<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>


小结:模式来源于生活,所以只有把模式生活化,多多实践才能更好的理解各个模式,也能够从生活中抽象出更多的模式。

单例模式,布布扣,bubuko.com

单例模式

标签:style   class   blog   c   code   tar   

原文地址:http://blog.csdn.net/luckyzhoustar/article/details/26871767

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!