1、Singleton 单件(创建模式)

一、Singleton模式主要应用在一些特殊的类,在整个系统运行中,有且仅有一个实例的场景

二、Singleton模式分为单线程与多线程情况,当然多线程一样适应单线程

  单线程:在这种情况下比较容易,因为你的程序你能保证在单线程下运行,所以不要考虑那么多情况

  

    public class Singleton
    {
        private static Singleton instance;

        /// <summary>
        /// 拒绝类外的成员创建实例
        /// </summary>
        private Singleton()
        { }
        /// <summary>
        /// 用属性公开实例对象
        /// </summary>
        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }

   多线程:因为在多线程环境时,在判断instance为null与创建实例之类,有可能存在多个线程同时进入判断,从而创建多个不同的实例,为了防止这种情况,

在判断instance为空时,增加双判断

    public class Singleton
    {
        private static volatile Singleton instance;

        private static object lockHelper = new object();

        /// <summary>
        /// 拒绝类外的成员创建实例
        /// </summary>
        private Singleton()
        { }
        /// <summary>
        /// 用属性公开实例对象
        /// </summary>
        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (lockHelper)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                    
                }
                return instance;
            }
        }
    }

 一个比较简单的实现:

 

   public class Singleton
    {
        public static readonly Singleton instance = new Singleton();
        private Singleton()
        { }
    }

 

posted @ 2014-07-03 17:00  刘继先  阅读(259)  评论(0编辑  收藏  举报