zoukankan      html  css  js  c++  java
  • 单例模式

    

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

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

     通用类图


    通用代码

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


    小结:模式来源于生活,所以仅仅有把模式生活化,多多实践才干更好的理解各个模式,也可以从生活中抽象出很多其它的模式。

  • 相关阅读:
    关于DOS的常用操作
    <leetcode 第188场周赛>
    大挑战!状压dp!
    41. 缺失的第一个正数
    1095. 山脉数组中查找目标值 (二分查找)
    “人活着就是为了贪心”——贪心算法日
    二分查找
    2020.4.25 leetcode 编程战队赛
    <leetcode c++>221. 最大正方形
    <leetcode c++>面试题51. 数组中的逆序对
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6792458.html
Copyright © 2011-2022 走看看