C# 单例模式(Single)
保证一个类仅有一个实例,并提供一个访问点,代码如下:
public sealed class Logger { static Logger _logger = null; Logger() { } public static Logger Instance { get { if (_logger == null) { _logger = new Logger(); } return _logger; } } }
多线程单例代码如下:
public sealed class Logger { //第一步:定义私有变量和同步加锁标识 private static Logger _logger; private static readonly object locker = new object(); // 第二步:禁止对外公开构造函数 private Logger() { } //第三步:对外公开一个实例 public static Logger Instance { get { //双重判定:因为lock很消耗资源,所以先判断,减少不必要的lock if(_logger==null) { //加锁阻塞其它线程创建实例 lock(locker) { if (_logger == null) { _logger = new Logger(); } } return _logger; } } } }