聊聊如何使用单例模式
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊如何使用单例模式相关的知识,希望对你有一定的参考价值。
介绍
单例模式,顾名思义就是只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面我们来看下有哪几种实现方式吧。
实现方式
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、方便资源相互通信的环境。
以上是关于聊聊如何使用单例模式的主要内容,如果未能解决你的问题,请参考以下文章