C#实现单例设计模式
目的:C#中的单例设计模式是一种创建对象的设计模式,确保一个类只有一个实例,并提供一个全局访问点。
- 懒汉式单例模式:
internal class SinglePerson
{
//1.构造函数私有化
private SinglePerson() { }
//2.声明一个【静态】字段,来储存全局唯一的单例对象
private static SinglePerson _singlePerson = null;
//3.写一个静态方法,返回全局唯一的单例对象,赋值给已创建的单例对象_singPerson
public static SinglePerson GetSinglePerson()
{
if (_singlePerson == null)
{
_singlePerson = new SinglePerson();
return _singlePerson;
}
return _singlePerson;
}
}
- 饿汉式单例模式:
internal class SinglePerson
{
//1.构造函数私有化
private SinglePerson() { }
//2. 声明一个静态字段,来储存全局唯一的单例对象
private static SinglePerson _singlePerson = new SinglePerson();
//3.写一个静态方法,返回全局唯一的单例对象,赋值给_singlePerson
public static SinglePerson GetSinglePerson()
{
return _singlePerson;
}
}
一些细节:
- 单例类的构造函数应该是私有的,以防止其他代码直接实例化对象。
- 单例类应该是 sealed(密封)的,以防止其他类继承并创建新的实例。
- 单例对象的访问点通常是一个只读的静态属性或方法。
- 懒汉式实现中使用了双重检查锁定来避免无谓的线程同步开销。
- 在多线程环境下使用单例模式时,需要考虑线程安全性,可以使用 lock 关键字进行同步。
- 还可以使用Lazy类来简化懒汉式单例的实现:
private static Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton());