深入浅出单例模式
来源:互联网 发布:淘宝达人挣钱吗 编辑:程序博客网 时间:2024/05/03 21:21
从现在看来,学习设计模式是很久之前的事了,刚开始的时候对设计模式的理解真的很浅,基本就是处于表面,不知道怎么在系统中应用。现在小组开始合作做系统了,在系统中使用设计模式,能更好的实现代码复用,让自己的系统更好的做到低耦合高内内,同时对于后期的扩展和维护也更加的方便。
这篇博客我们主要重新回顾和认识单例模式:
单例模式(Singleton):
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
结构图:
C#语言的实现代码:
<span style="font-family:Microsoft YaHei; font-size:18px">class Singleton { //定义一个私有变量,保存创建的实例 private static Singleton instance; //私有的构造方法,外界不能利用New创建此类实例 private Singleton () { } //提供一个静态方法,用于返回唯一的Singleton实例 public static Singleton GetInstance() { //如果instance为null,表明还没有创建Singleton对象 //如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法 if (instance == null) { //创建一个Singleton对象,并将缓存起来 instance = new Singleton(); } return instance; } }</span>
<span style="font-family:Microsoft YaHei; font-size:18px"> //客户端代码 static void Main(string[] args) { //创建Singleton对象不能通过构造器,只能通过getInstance方法 Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) //比较两次实例化对象的结果是实例相同 { Console.WriteLine("两个对象是相同的实例。"); } Console.Read(); }</span>
下面我们使用vb.net语言,实现单例模式
首先建立一个Windows应用程序,默认的窗体为Form1,设置它的ISMdiContainer属性为true,表示它是一个多文档界面MdI子窗体的容器。然后建立button按钮,我们再创建一个窗体ChildForm,单击就创建一个子窗体。
在没有使用单例模式的时候,子窗体会显示多个(如图1),但这并不是我们想要的结果,我们想要图2中显示的,无论单击多少次,只显示一个子窗体,此时我们就用到了单例模式。
图1
图2
下面我们按照我们上面的代码照葫芦画瓢就好。
Public Class ChildForm ' 定义一个私有变量,保存创建的实例 Private Shared instance As ChildForm '私有的构造方法,外界不能利用New创建此类实例(我们没有写),所有类都有构造方法,不编码则系统默认生成空的构造方法 ' 提供一个静态方法,用于返回唯一的Singleton实例 Public Shared Function CreateForm() As ChildForm '如果instance不存在或关闭时, 表明还没有创建ChildForm对象 '如果instance存在时, 则表明已经创建了ChildForm对象, 将不会执行该方法 If instance Is Nothing OrElse instance.IsDisposed = True Then '创建一个ChildForm对象,并将缓存起来 instance = New ChildForm instance.MdiParent = Form.ActiveForm End If Return instance '返回实例化结果 End FunctionEnd Class'客户端代码Public Class Form Private Sub btnShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShow.Click '单击显示子窗体 ChildForm.CreateForm().Show() End SubEnd Class
单例模式的优点和缺点:
优点:
1、保证该类只有唯一的实例。
2、该类自身负责保存实例,并保证没有其他实例可以被创建。
3、向整个系统公开实例接口,对唯一实例的受控访问。
所有的设计模式都是一样的,既有优点也有缺点,我们利用它的优点的同时,不能忽略他的缺点,在多线程的程序中,多个线程同时访问,会造成创建多个实例,存在不安全问题。
- 深入浅出单例模式
- 深入浅出单例模式
- 深入浅出设计模式之单例模式
- 深入浅出单例模式(转)
- 深入浅出单例singleton设计模式
- java单例模式之深入浅出
- 单例设计模式深入浅出分析
- 深入浅出的理解单例模式
- 深入浅出单例模式---不仅仅是单例
- 深入浅出单例模式---不仅仅是单例
- 深入浅出设计模式-005:单例模式(Singleton Pattern)
- 深入浅出设计模式笔记之二:单例模式
- 深入浅出设计模式(三)单例模式
- 深入浅出设计模式(一):单例模式
- 深入浅出设计模式之单例设计模式
- 深入浅出讲解单例模式(java实现)
- 深入浅出单实例Singleton设计模式
- 深入浅出单实例Singleton设计模式
- Zookeeper使用和原理探究
- 取出购买记录、评价记录、订单页面取出商品图片
- Linux curses库
- android程序闹钟服务的实现
- sencha touch之布局
- 深入浅出单例模式
- networkx--四种网络模型
- constant常量
- Hibernate 的两种继承映射关系,单表映射
- 给明年依然年轻的我们:欲望、外界、标签、天才、时间、人生目标、现实、后悔、和经历
- JNI学习笔记
- sharepoint 2010 配置搜索页面的搜素结果链接使用新页面打开
- VC剪切版的复制
- 黑马程序员——内部类