首页 > 代码库 > 设计模式之单例模式

设计模式之单例模式

单例模式:主要关注三点:

1. 私有化构造器。

2. 静态公有方法方法,返回唯一实例。

3. 防止多线程程序并发导致的多实例的问题。

/// <summary>
    /// 单例模式.
    /// </summary>
    public class Singleton
    {
        private static Singleton instance;

        /// <summary>
        /// 程序运行时,创建一个静态只读的进程辅助对象
        /// </summary>
        private static readonly object _object = new object();

        /// <summary>
        /// 构造方法私有,外部不能通过New类实例化此类
        /// </summary>
        private Singleton()
        {
        }
        /// <summary>
        /// 静态方法:唯一全局访问点,这里有两个 instance==null的判断
        /// </summary>
        /// <returns></returns>
        public static Singleton GetInstance()
        {
            //先判断实例是否存在,不存在再加锁处理
            if (instance == null)
            {
                //在同一时刻加了锁的那部分程序只有一个线程可以进入,
                lock (_object)
                {
                    //如实例不存在,则New一个新实例,否则返回已有实例
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }

 

还有一种写法:

不用考虑多线程的问题。代码更简单。

/// <summary>
    /// 单例模式.
    /// </summary>
    public sealed class Singleton
    {
        private static readonly Singleton instance = null;

        /// <summary>
        /// 静态初始化是在 .NET 中实现 Singleton 的首选方法
        /// </summary>
        static Singleton()
        {
            instance = new Singleton();
        }
        private Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }

 

设计模式之单例模式