聊聊如何使用单例模式
系统运维 2025-10-07 02:01:29
0
本文转载自微信公众号「UP技术控」,聊聊例模作者conan5566。何使转载本文请联系UP技术控公众号。用单
介绍
单例模式,聊聊例模顾名思义就是何使只有一个实例,并且她自己负责创建自己的用单对象,这个类提供了一种访问其唯一的聊聊例模对象的方式,可以直接访问,何使不需要实例化该类的用单对象。下面我们来看下有哪几种实现方式吧。聊聊例模
实现方式
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、方便资源相互通信的环境。云服务器提供商