【设计模式】 02、单例模式

【描述】:Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点

【方式1】

sealed class Singleton
    {
        /// <summary>
        /// 静态只读变量,Instance只会在编译时初始化一次,这就保证了是单例
        /// </summary>
        internal static readonly Singleton Instance = new Singleton();

        /// <summary>
        /// 私有构造函数
        /// </summary>
        private Singleton() { }
    }

这种方式不能实现延迟初始化(调用时才进行初始化),它在编译时就初始化出了一个实例,sealed保证类不能被继承。

【方式二】

sealed class Singleton
    {
        // readonly不会被重新实例化
        internal static readonly Singleton Instance = new Singleton();

        /// <summary>
        /// 私有构造函数,防止外部new
        /// </summary>
        private Singleton()
        {
        }

        /// <summary>
        /// 在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,
        /// 最多只运行一次
        /// </summary>
        static Singleton()
        {
            // 可用于测试什么时候初始化
            Console.WriteLine("...");
        }
    }

这种方式通过 静态构造函数 实现了延迟初始化。

原文地址:https://www.cnblogs.com/fb-boy/p/3487098.html