标签:obj 单例模式 职责 获取 console design 指定 static 进程
保证一个类仅有一个实例,并提供一个访问它的全局访问点
简单来说,让类自己负责保存它的唯一实例(静态私有变量),通过使用受保护的构造函数来保证没有其他实例可以被创建,并且提供一个访问该实例的公有方法(公有的静态方法),这就是单例(Singleton)模式。
定义一个Instance方法,允许客户访问它的唯一实例
class Singleton
{
//静态变量instance保存唯一实例
private static Singleton instance;
//私有化构造函数,保证唯一实例的受控访问
private Singleton()
{
}
//提供访问该实例的静态方法
public static Singleton Instance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
static void Main(string[] args)
{
Singleton s1 = Singleton.Instance();
Singleton s2 = Singleton.Instance();
Console.WriteLine(s1 == s2);
Console.ReadLine();
}
对于多线程的程序,调用以上示例中的Instance方法可能创建多个实例。
为了解决线程安全的问题,我们可以通过给进程加锁来处理。
class LazySingleton
{
private static LazySingleton instance;
private static readonly object syncRoot = new object();
private LazySingleton()
{
}
public static LazySingleton Instance()
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new LazySingleton();
}
}
}
return instance;
}
}
这种在第一次引用时才会实例化的方式被称为懒汉式单例类。如同一个懒汉已经饿到不行了才去吃东西(需要使用实例时才去创建对象)。
class EagerSingleton
{
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton()
{
}
public EagerSingleton Instance()
{
return instance;
}
}
这种使用静态初始化,在类被加载时就进行实例化的方式被称为饿汉式单例类。如同一个人被饿怕了,不管需不需要,先把吃的买好了存起来(不管是否会使用该实例,总是在类加载时就创建好实例)。
dotnet-design-pattern_singleton
标签:obj 单例模式 职责 获取 console design 指定 static 进程
原文地址:https://www.cnblogs.com/Answer-Geng/p/9060356.html