在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
单例模式:保证一个类只有一个实例,并听一个访问它的全局访问点;单例的实现分为两种,懒汉式单例模式和饿汉式单例模式
1.懒汉式单例模式
public class Singleton
{
private static Singleton instance;
//进程辅助对象,多线程同时访问该类时,对该对象加锁,只有一个线程可以进入
private static readonly object syncRoot = new object();
/// <summary>
/// 定义个私有的构造方法,防止外界通过new创建该类的实例
/// </summary>
private Singleton() { }
/// <summary>
/// 获取本类实例的唯一全局访问点
/// </summary>
public static Singleton GetInstance()
{
//先判断实例是否存在,不存在再加锁,提高访问性能
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
public void Action()
{
Console.WriteLine("我是单例的具体业务……");
}
}
2.饿汉式单例模式
/// <summary>
/// 防止派生,派生可能会增加实例
/// </summary>
public sealed class Singleton
{
//由于定义为readonly,意味着只能在静态初始化期间或者构造函数中分配变量
private static readonly Singleton instance = new Singleton();
/// <summary>
/// 定义个私有的构造方法,防止外界通过new创建该类的实例
/// </summary>
private Singleton() { }
/// <summary>
/// 获取本类实例的唯一全局访问点(由于定义了静态的只读变量,因此不需要考虑线程安全问题)
/// </summary>
public static Singleton GetInstance()
{
return instance;
}
public void Action()
{
Console.WriteLine("我是单例的具体业务……");
}
}
开启场景模拟
static void Main(string[] args)
{
Singleton.GetInstance().Action();
}