【设计模式】- 单例模式
1.单例模式:保证一个类只要一个实例,并提供一个访问它的全局访问点。
2.谈到单例模式,可能有人听过‘饿汉式单例类’ 和 ‘饱汉式单例类’。
- 饿汉式单例类, 类在被加载时就实例化了。
- 饱汉式单例类, 类在第一次被引用时被实例化。
3.多线程下保证单例,双重锁定,代码如下:
namespace SingletonPattern
{
/// <summary>
/// 饱汉模式
/// </summary>
public class Singleton_Full
{
private Singleton_Full() { }
private static Singleton_Full Instance = null;
public static readonly object syncObject = new object();
public static Singleton_Full GetSingletonInstance()
{
// 双重锁定,保证多线程下的单例
if (Instance == null)
{
lock (syncObject)
{
if (Instance == null)
{
Instance = new Singleton_Full();
}
}
}
return Instance;
}
}
/// <summary>
/// 饿汉模式
/// </summary>
public sealed class Singleton_Hungry
{
private static readonly Singleton_Hungry Instance = new Singleton_Hungry();
private Singleton_Hungry() { }
public static Singleton_Hungry GetSingletonInstance()
{
return Instance;
}
}
}
namespace SingletonPattern
{
class Program
{
//客户端调用
static void Main(string[] args)
{
Singleton_Full A = Singleton_Full.GetSingletonInstance();
Singleton_Full B = Singleton_Full.GetSingletonInstance();
if(A == B)
{
Console.WriteLine("饱汉式单例类,实例A与实例B是相同的");
}
Console.WriteLine("----------------------------------------------------");
Singleton_Hungry C = Singleton_Hungry.GetSingletonInstance();
Singleton_Hungry D = Singleton_Hungry.GetSingletonInstance();
if (C == D)
{
Console.WriteLine("饿汉式单例类,实例C与实例D是相同的");
}
Console.ReadKey();
}
}
}

浙公网安备 33010602011771号