单例模式:
在我们的程序中,经常的会出现这个的情况,既:在整个程序中,只保持一个类的一个实例,因此,我们可以用单例模式。
单例模式可以分 懒汉式单例类,饿汉式单例类,两个不同点在于:一个是 饿汉式单例类 自己初始化的时候已经实例了该类。相同点都在于:自己为自己实例化。当然,既然是单例模式,就必须自己能够初始化并提供实例对象。
using System;
using System.Collections.Generic;
using System.Text;
namespace 单例模式
{
/// <summary>
/// 懒汉式单例类,双重检查
/// </summary>
public class Singleton
{
private static volatile Singleton singleton = null;
private Singleton()
{ }
public static Singleton GetSingleton()
{
if (singleton == null)
{
lock (typeof(Singleton))
{
if (singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
public class 饿汉式单例类
{
private static readonly 饿汉式单例类 一个饿汉式单例类实例 = new 饿汉式单例类();
private 饿汉式单例类()
{ }
public static 饿汉式单例类 GetSingleton()
{
return 一个饿汉式单例类实例;
}
}
}
也许我们会认为,在我们的经常开发的系统中,经常的会用到一些全程变量,那我们可不可以用单例模式来满足呢?呵呵,本人没研究过,但是,个人认为,可以把这些全程变量用一个单例类来保存起来。
同时,还有种情况,如我们在操作数据库的时候,sqlconnection连接,我们似乎可以用单例类,保持整个系统只有一个sqlconnection实例,个人感觉,这个不太应该,单例模式要求,只有在真正需要单一实例的时候,才用单列,显然,我们sqlconnection,并不是需要单一的,同时,我们也要考虑,sqlconnection连接,我们不可能一直的长期占有该连接,既我们不可能open一个连接后,一直的不close吧?
(上面两段话,是依据java与模式 一书上所讲单例模式的习题所总结的,个人还是没搞明白,呵呵。)
最近,在做一个项目的时候,经常的看见有些很象单例模式的代码。
如下:
/// <summary>
/// /// </summary>
public class Singleton
{
public static readonly Singleton Default= new Singleton();
public Singleton()
{
}
}
上面的代码,应该也算一个单例类,但是,不应该算一个完全的单例类,别人为什么这样写,我还没研究出来。以后补上吧
付上一些好的文章连接:
有事Q我:
姓名:颜昌钢
联系方式:yanchanggang@boco.com.cn
电话:13886086508
QQ:95550107
公司:亿阳集团武汉分公司
移动飞信:647360243