单例模式
来源:互联网 发布:阿里云cdn 防cc设置 编辑:程序博客网 时间:2024/05/22 10:46
单例模式是一个比较简单的模式,其定义如下:
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
通用类图
通用代码
<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 SubEnd 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 FunctionEnd 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>
小结:模式来源于生活,所以只有把模式生活化,多多实践才能更好的理解各个模式,也能够从生活中抽象出更多的模式。
1 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- RTEMS目录树
- 在eclipse中运行hadoop程序
- Linux程序可以编译连接但是执行时找不到*.so 一般都和LD_LIBRARY_PATH有关
- Mahout源码目录说明
- [leetcode]Single Number
- 单例模式
- try-catch和throw,throws的区别和联系
- 进程调度
- hadoop的一些常见问题及解决方法
- 八皇后问题(EightQueens)
- 第7天 软考踩点灾难日
- 终端运行hadoop
- 我是否该走编程这条路?
- [leetcode]Maximum Depth of Binary Tree