二十三种设计模式之单例模式
单例模式:个人理解,保证只创建一个实例的设计模式。
用于资源单一,例如访问数据库等。
1.完整的单例模式
创建控制台命令,SingletonDemo
创建一个SingletonFirst类
class SingletonFirst
{
private SingletonFirst() //使用private的目的是,防止外部可以new 出
{
Thread.Sleep(1000);
Console.WriteLine("创建SingletonFirstDemo");
}
public static object obj = new object();//为了lock创建一个对象
public static SingletonFirst sf = null;//static 使用因为静态函数调用必须为静态变量
public static SingletonFirst CreateInstance()//用staic 是为了 类名.函数名可以直接调用
{
if (sf == null)
{
Console.WriteLine("进入临界区");
lock (obj)//锁定obj 知道被释放 {开始 直到}结束释放obj //加lock的目的为了使用于多线程使用一个资源
{
if (sf == null)
{
sf = new SingletonFirst();
}
}
}
return sf;
}
public void SingleShow()
{
Console.WriteLine("展示SingleShow()");
}
}
2.利用.Net frameWork CLR来创建单例模式
class SingletonSecond
{
private SingletonSecond()
{
Thread.Sleep(1000);
Console.WriteLine("创建SingletonFirstDemo");
}
static SingletonSecond() //静态函数在编译时就创建出对象,并且只有一个
{
sf = new SingletonSecond();
}
public static object obj = new object();
public static SingletonSecond sf = null;//static 使用因为静态函数调用必须为静态变量
public static SingletonSecond CreateInstance()//用staic 是为了 类名.函数名可以直接调用
{
return sf;
}
public void SingleShow()
{
Console.WriteLine("展示SingleShow()");
}
}
3.更简便的方式
class SingletonThird
{
private SingletonThird()
{
Thread.Sleep(1000);
Console.WriteLine("创建SingletonFirstDemo");
}
public static SingletonThird sf = new SingletonThird();//static 使用因为静态函数调用必须为静态变量
public static SingletonThird CreateInstance()//用staic 是为了 类名.函数名可以直接调用 用CLR 保证
{
//不会被释放的
return sf;
}
public void SingleShow()
{
Console.WriteLine("展示SingleShow()");
}