2021年2月8日星期一

聊聊如何使用单例模式

介绍

单例模式,顾名思义就是只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面我们来看下有哪几种实现方式吧。

实现方式

1、使用lock ,保证方法只有一个线程可以进入。

 /// <summary> /// 单例类 /// </summary> public class Singleton {  private Singleton()  {   long lResult = 0;   for (int i = 0; i < 100 - 000 - 000; i++)   {    lResult += i;   }   Thread.Sleep(2000);   Console.WriteLine($"{this.GetType().Name}完成构造....");  }  private static Singleton Instance = null;  private static readonly object Singleton_Lock = new object();  public static Singleton CreateInstance()  {   if (Instance == null)   {    lock (Singleton_Lock)//保证方法块儿只有一个线程可以进入    {     Console.WriteLine("进入lock排队....");     Thread.Sleep(1000);     if (Instance == null)      Instance = new Singleton();    }   }   return Instance;  }  public static void DoNothing()  {   Console.WriteLine("DoNothing");  }  public void Show()  {   Console.WriteLine($"{this.GetType().Name} Show....");  } }

2、使用静态构造函数,由CLR调用,在类型第一次被使用前调用,且只调用一次。

 /// <summary> /// 单例类 /// </summary> public class SingletonSecond {  private SingletonSecond()  {   long lResult = 0;   for (int i = 0; i < 100 - 000 - 000; i++)   {    lResult += i;   }   Thread.Sleep(2000);   Console.WriteLine($"{this.GetType().Name}完成构造....");  }  private static SingletonSecond Instance = null;  /// <summary>  /// 静态构造函数,由CLR调用,在类型第一次被使用前调用,且只调用一次!  /// </summary>  static SingletonSecond()  {   Instance = new SingletonSecond();  }  public static SingletonSecond CreateInstance()  {      return Instance;  }  public static void DoNothing()  {   Console.WriteLine("DoNothing");  }  public void Show()  {   Console.WriteLine($"{this.GetType().Name} Show....");  } }

3、使用静态字段,由CLR调用,在类型第一次被使用前初始化,且只初始化一次。

 /// <summary> /// 单例类 /// </summary> public class SingletonThird {  private SingletonThird()  {   long lResult = 0;   for (int i = 0; i < 100 - 000 - 000; i++)   {    lResult += i;   }   Thread.Sleep(2000);   Console.WriteLine($"{this.GetType().Name}完成构造....");  }  /// <summary>  /// 静态字段,由CLR调用,在类型第一次被使用前初始化,且只初始化一次!  /// </summary>  private static SingletonThird Instance = new SingletonThird();    public static SingletonThird CreateInstance()  {      return Instance;  }  public static void DoNothing()  {   Console.WriteLine("DoNothing");  }  public int iNum = 0;  public void Show()  {   Console.WriteLine($"{this.GetType().Name} Show..{iNum++}..");  }  public void Add()  {   this.iNum++;  } }

使用场景

1、需要生成唯一序列的环境。

2、需要频繁实例化然后销毁的对象。

3、创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 

4、方便资源相互通信的环境。









原文转载:http://www.shaoqun.com/a/537570.html

跨境电商:https://www.ikjzd.com/

环球b2b:https://www.ikjzd.com/w/1762

jpgoodbuy:https://www.ikjzd.com/w/1553


介绍单例模式,顾名思义就是只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面我们来看下有哪几种实现方式吧。实现方式1、使用lock,保证方法只有一个线程可以进入。///<summary>///单例类///</summary>publicclassSingleton{privateSingleton(
indiegogo:indiegogo
gtc:gtc
如何写好物流降本增效"大文章"?:如何写好物流降本增效"大文章"?
《堡垒之夜》爆火,FORTNITE周边产品被爆侵权!:《堡垒之夜》爆火,FORTNITE周边产品被爆侵权!
eBay正式发布通知:坚决打击假海外仓行为!:eBay正式发布通知:坚决打击假海外仓行为!

没有评论:

发表评论