1. 程式人生 > >C#設計模式--單例模式

C#設計模式--單例模式

資源 let readonly eat 私有靜態變量 sta 技術分享 span ret

目的:避免對象的重復創建

單線程具體的實現代碼

技術分享
    /// <summary>
    /// 私有化構造函數
    /// </summary>
    public class Singleton
    {
        private Singleton()
        {//構造函數可能耗時間,耗資源

        }
        public static Singleton CreateInstance()
        {
            if (_Singleton == null)
            {
                _Singleton 
= new Singleton(); } return _Singleton; } }
View Code

多線程具體的實現代碼--雙if加lock

技術分享
    /// <summary>
    /// 私有化構造函數
    /// 私有靜態變量保存對象
    /// </summary>
    public class Singleton
    {

        private Singleton()
        {//構造函數可能耗時間,耗資源

        }

        private static
Singleton _Singleton = null; private static readonly object locker = new object();//加鎖 //雙if加lock public static Singleton CreateInstance() { if (_Singleton == null)//保證對象初始化之後不需要等待鎖 { lock (locker)//保證只有一個線程進去判斷 {
if (_Singleton == null) { _Singleton = new Singleton(); } } } return _Singleton; } }
View Code

另外的實現方法

第一種:

技術分享
    public class SingletonSecond
    {

        private SingletonSecond()
        {//構造函數可能耗時間,耗資源
          
        }
     
        private static SingletonSecond _Singleton = null;
        static SingletonSecond()//靜態構造函數,由CLR保證在第一次使用時調用,而且只調用一次
        {
            _Singleton = new SingletonSecond();
        }
        public static SingletonSecond CreateInstance()
        {
            return _Singleton;
        }
    }
View Code

第二種:

技術分享
 public class SingletonThird
    {

        private SingletonThird()
        {//構造函數可能耗時間,耗資源
           
        }
       
        private static SingletonThird _Singleton = new SingletonThird();
        public static SingletonThird CreateInstance()
        {
            return _Singleton;
        }
    }
View Code

C#設計模式--單例模式