設計模式一一單例模式

單例模式多線程

1、定義函數

定義:確保一個類只有一個實例,並提供一個全局訪問點。spa

理解:保證一個類只有一個實例的一種實現方法(該方法就是爲了下降對象之間的耦合度)。線程

2、代碼塊code

一、舉個栗子,拿多線程爲栗子,具體看代碼註釋。上代碼~對象

namespace 單例模式Test
{
    public class TestClass
    {
        // 定義一個靜態變量來保存類的實例
        private static TestClass Car;
        // 定義一個標識確保線程同步
        private static readonly object locker = new object();
        // 定義私有構造函數,使外界不能建立該類實例
        private TestClass()
        {}
        /// <summary>
        /// 定義公有方法提供一個全局訪問點,同時你也能夠定義公有屬性來提供全局訪問點
        /// </summary>
        /// <returns></returns>
        public static TestClass GetCar()
        {
            if (Car == null)
            {
                // 當第一個線程運行到這裏時,此時會對locker對象 "加鎖",
                // 當第二個線程運行該方法時,首先檢測到locker對象爲"加鎖"狀態,該線程就會掛起等待第一個線程解鎖
                // lock語句運行完以後(即線程運行完以後)會對該對象"解鎖"
                lock (locker)
                {
                    // 若是類的實例不存在則建立,不然直接返回
                    if (Car == null)
                    {
                        Car = new TestClass();
                    }
                }
            }
            return Car;
        }
    }
} 

 2、總結blog

一、單例模式確保某個類只有一個實例,並且自行實例化並向整個系統提供這個實例同步

二、單例模式是經過private限定,避免了類在外部被實例化class

相關文章
相關標籤/搜索