二十三种设计模式之单例模式

单例模式:个人理解,保证只创建一个实例的设计模式。

用于资源单一,例如访问数据库等。

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()");
}

posted @ 2017-09-02 20:16  懂小姐  阅读(300)  评论(0编辑  收藏  举报