C#中的单例模式(Singleton Pattern)
单例模式(Singleton Pattern),是一种常用的软件设计模式。
通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例。
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
显然,单例模式的要点有三个:
- 一是某个类 只能有一个 实例;
- 二是它必须 自行创建 这个实例;
- 三是它必须自行向整个系统提供这个实例。
因此需要用一种只允许生成类的唯一实例的机制,“阻止”所有想要生成对象的访问。
从具体实现角度来说,就是以下三点:
- 一是单例模式的类只提供 私有的构造函数 ;
- 二是类定义中含有一个该类的 静态私有对象 ;
- 三是该类提供了一个 静态的公有函数 用于创建或获取它本身的静态私有对象。
写法一:
public class Logger
{
private static Logger _logger = null;
private Logger()
{
//do something
}
public static Logger GetInstance()
{
if (_logger == null)
{
_logger = new Logger();
}
return _logger;
}
public void Log(object o)
{
Console.WriteLine(o);
}
}
调用:
Logger.GetInstance().Log("");
虽然次数很少,但如果每次请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
方法二:
public class Logger
{
private Logger()
{
//do something
}
static Logger()
{
Instance = new Logger();
}
public static Logger Instance
{
get;
private set;
}
public void Log(object o)
{
Console.WriteLine(o);
}
}
调用:
Logger.Instance.Log("");