【設計模式】 0二、單例模式

【描述】:Singleton模式要求一個類有且僅有一個實例,而且提供了一個全局的訪問點函數

【方式1】測試

sealed class Singleton
    {
        /// <summary>
        /// 靜態只讀變量,Instance只會在編譯時初始化一次,這就保證了是單例
        /// </summary>
        internal static readonly Singleton Instance = new Singleton();

        /// <summary>
        /// 私有構造函數
        /// </summary>
        private Singleton() { }
    }

這種方式不能實現延遲初始化(調用時才進行初始化),它在編譯時就初始化出了一個實例,sealed保證類不能被繼承。url

【方式二】spa

sealed class Singleton
    {
        // readonly不會被從新實例化
        internal static readonly Singleton Instance = new Singleton();

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

        /// <summary>
        /// 在建立第一個類實例或任何靜態成員被引用時,.NET將自動調用靜態構造函數來初始化類,
        /// 最多隻運行一次
        /// </summary>
        static Singleton()
        {
            // 可用於測試何時初始化
            Console.WriteLine("...");
        }
    }

這種方式經過 靜態構造函數 實現了延遲初始化。code

相關文章
相關標籤/搜索