单例模式:保证一个类只能有一个实例,并且该类自己向外界提供一个访问它的全局访问接口(静态方法)。
特点:
1,只有一个实例。
2,自己创建该实例。
3,向外界提供一个访问该实例的公共接口。
优点:
1,保证系统内存中只有一个实例,节约系统资源。
缺点:
1,单例类没有抽象层,不易扩展。
经典单例模式:
namespace singleton
{
public class Singleton
{
private static Singleton instance;
private Singleton(){ }
public static Singleton GetInstance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
class Program
{
static void Main(string[] args)
{
Singleton s1=Singleton.GetInstance();
Singleton s2 = Singleton.GetInstance();
if (s1 == s2)
{
Console.WriteLine("单例模式,两个对象访问同一个实例!");
Console.ReadKey();
}
}
}
}
多线程下的单例模式:
public class Singleton
{
private static Singleton instance;
private static readonly object _lock = new object();//创建一个静态只读的进程辅助对象
private Singleton(){ }
public static Singleton GetInstance()
{
if (instance == null)
{
lock (_lock)//加锁
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
饿汉式单例(静态初始化):
public sealed class Singleton
{
private static readonly Singleton instance =new Singleton();//静态实例化的方式是在自己被加载时就是实例化自己。
private Singleton(){ }
public static Singleton GetInstance()
{
return instance;
}
}