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;
                }
                
            }

        }
    }

 

 

posted @ 2012-02-20 13:47  无主之城  阅读(1704)  评论(1编辑  收藏  举报