单例模式 -- 大话设计模式

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

单例模式:保证一个类只有一个实例,并听一个访问它的全局访问点;单例的实现分为两种,懒汉式单例模式和饿汉式单例模式

1.懒汉式单例模式

    public class Singleton
    {
        private static Singleton instance;

        //进程辅助对象,多线程同时访问该类时,对该对象加锁,只有一个线程可以进入
        private static readonly object syncRoot = new object();

        /// <summary>
        /// 定义个私有的构造方法,防止外界通过new创建该类的实例
        /// </summary>
        private Singleton() { }

        /// <summary>
        /// 获取本类实例的唯一全局访问点
        /// </summary>
        public static Singleton GetInstance()
        {
            //先判断实例是否存在,不存在再加锁,提高访问性能
            if (instance == null)
            {
                lock (syncRoot)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }

            return instance;
        }

        public void Action()
        {
            Console.WriteLine("我是单例的具体业务……");
        }
    }

 2.饿汉式单例模式

    /// <summary>
    /// 防止派生,派生可能会增加实例
    /// </summary>
    public sealed class Singleton
    {
        //由于定义为readonly,意味着只能在静态初始化期间或者构造函数中分配变量
        private static readonly Singleton instance = new Singleton();

        /// <summary>
        /// 定义个私有的构造方法,防止外界通过new创建该类的实例
        /// </summary>
        private Singleton() { }

        /// <summary>
        /// 获取本类实例的唯一全局访问点(由于定义了静态的只读变量,因此不需要考虑线程安全问题)
        /// </summary>
        public static Singleton GetInstance()
        {
            return instance;
        }

        public void Action()
        {
            Console.WriteLine("我是单例的具体业务……");
        }
    }

   开启场景模拟

        static void Main(string[] args)
        {
            Singleton.GetInstance().Action();
        }

 

posted @ 2015-11-04 15:45  荒古禁地  阅读(167)  评论(0编辑  收藏  举报