/*------------------Singleton 单例模式-------------------
①单例模式(单线程和多线程)
②单例模式的三种写法
③单例模式的优缺点
④深度探讨单例模式的应用场景
需求分析:1.对象在构造的时候会耗时间或者占用资源
2.很多地方都需要用到这个对象
3.不同的地方使用一个实例和多个实例没有区别
综上所述:对象重用,不需要重复构造
解析:一、构造函数私有化----避免重复构造
二、公开静态方法提供实例----这样才能提供外部访问
三、静态变量共享----保证全局变量的唯一性
思考:单线程与多线程的区别,考虑并发性
解决方案:加锁,但是要考虑性能优化(因为重复加锁会影响性能),加判断
*/
#region 懒汉式
public static Singleton Instance = null;
private static readonly object _padLock = new object();
public static Singleton CreateInstance()
{
if (Instance == null)
{
lock (_padLock)//保证方法块儿只有一个线程可以进入
{
Console.WriteLine("进入lock排队....");
Thread.Sleep(1000);
if (Instance == null)
{
Instance = new Singleton();
}
}
}
return Instance;
}
#endregion
#region 饿汉式1
public static SingletonSecond Instance = null;
/// <summary>
/// 静态构造函数:由CLR保证,在第一次使用到这个类型之前,自动被调用且只调用一次
/// 很多初始化都可以写在这里
/// </summary>
static SingletonSecond()
{
Instance = new SingletonSecond();
}
public static SingletonSecond CreateInstance()
{
return Instance;
}
#endregion
#region饿汉式2
/// <summary>
/// 静态构造函数:由CLR保证,在第一次使用到这个类型之前,会自动初始化且只会初始化一次
private static SingletonThird Instance = new SingletonThird();
public static SingletonThird CreateInstance()
{
return Instance;
}
#endregion