当前位置: 首页 > 科技观察

说说单例模式的使用方法

时间:2023-03-23 12:12:00 科技观察

本文转载自微信公众号《UP技控》,作者conan5566。转载本文请联系UP技控公众号。引入单例模式,顾名思义,只有一个实例,她负责创建自己的对象。该类提供了访问其唯一对象的方法,无需实例化该类的对象即可直接访问。让我们看一下其中的一些实现方法。实现方法1.使用锁保证只有一个线程可以进入方法。///

///单例类///publicclassSingleton{privateSingleton(){longlResult=0;for(inti=0;i<100-000-000;i++){lResult+=i;}Thread.Sleep(2000);Console.WriteLine($"{this.GetType().Name}完成构建....");}privatestaticSingletonInstance=null;privatestaticreadonlyobjectSingleton_Lock=newobject();publicstaticSingletonCreateInstance(){if(Instance==null){lock(Singleton_Lock)//保证只有一个线程可以进入方法块{Console.WriteLine("进入锁队列....");Thread.Sleep(1000);if(Instance==null)Instance=newSingleton();}}returnInstance;}publicstaticvoidDoNothing(){Console.WriteLine("DoNothing");}publicvoidShow(){Console.WriteLine($"{this.GetType().Name}显示。...");}}2.在第一次使用该类型之前使用由CLR调用的静态构造函数,并且仅使用一次。//////单例类///publicclassSingletonSecond{privateSingletonSecond(){longlResult=0;for(inti=0;i<100-000-000;i++){lResult+=i;}Thread.Sleep(2000);Console.WriteLine($"{this.GetType().Name}构造完成....");}privatestaticSingletonSecondInstance=null;//////静态构造函数,调用由CLR,在第一次使用该类型之前,而且只有一次!///staticSingletonSecond(){Instance=newSingletonSecond();}publicstaticSingletonSecondCreateInstance(){returnInstance;}publicstaticvoidDoNothing(){Console.WriteLine("DoNothing");}publicvoidShow(){Console.WriteLine($"{this.GetType().Name}Show.....");}}3.使用静态字段,由CLR调用,在第一次使用该类型之前初始化,并且只初始化一次。//////单例类///publicclassSingletonThird{privateSingletonThird(){longlResult=0;for(inti=0;i<100-000-000;i++){lResult+=i;}Thread.Sleep(2000);Console.WriteLine($"{this.GetType().Name}构造完成....");}//////静态字段,CLR调用,在该类型在第一次使用之前被初始化,而且只有一次!///privatestaticSingletonThirdInstance=newSingletonThird();publicstaticSingletonThirdCreateInstance(){returnInstance;}publicstaticvoidDoNothing(){Console.WriteLine("DoNothing");}publicintiNum=0;publicvoidShow(){"this{Console.$WriteLine(.GetType().Name}Show..{iNum++}..");}publicvoidAdd(){this.iNum++;}}使用场景1.需要生成唯一序列的环境。2.需要频繁实例化然后销毁的对象。3.花费太多时间或资源创建但经常使用的对象。4.有利于资源相互交流的环境。

最新推荐
猜你喜欢