實用的泛型Singleton類

來源:互聯網
上載者:User
  Singleton模式是最常的設計模式之一,我們會經常寫這類代碼.因其基本原理就是儲存一個靜態對象執行個體,所以我們便能利用泛型寫出一個通用的Singleton類.   代碼很簡單: public class Singleton<T> 
    ...{
        static readonly T _t;
        static Singleton()
        ...{
            _t = Construct();
        }

        public static T GetInstance()
        ...{
            return _t;
        }

        private static T Construct()
        ...{
            Type type = typeof(T);
            ConstructorInfo ctor;
            ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
                                        null, new Type[0], new ParameterModifier[0]);
            System.Diagnostics.Debug.Assert(ctor != null, "Error in ENLS.Basic.Singleton.Construct().");
            return (T)ctor.Invoke(new object[0]);            
        }
    }因為特化的泛型類是不同的類型,Singleton<Tuple<int>>和Singleton<Tuple<int,long>>不同,所以這兩個類中的_t是不同的靜態執行個體.然後在Construct方法中通過反射調用共有或私人的預設構造參數來建立新執行個體.為什麼會有public的建構函式呢,這是為了使用NullObject模式.比如為了方便我要給Tuple基類添加一個方法用來的到Null 物件 public static Tuple GetNullInstance<_Tuple>() where _Tuple: Tuple
 {
     return Singleton<_Tuple>.GetInstance();
 }有了這個Null 物件我就可以更簡單的使用前面文章中介紹的遍曆控制項的函數.public IEnumerable<Control> Iterator<_Tuple>(Control baseCtl) where _Tuple : Tuple
        ...{
            Tuple tuple = Tuple.GetNullInstance<_Tuple>();
            foreach(Control c in baseCtl.Controls)
            ...{
                if (!tuple.HasType(c))
                ...{
                    foreach (Control c1 in Iterator<_Tuple>(c))
                        yield return c1;
                }
                else
                    yield return c;
            }
        }這樣就可以很方便的調用了foreach (Control c in this.Iterator<Tuple<TextBox, TreeView, CheckBox>>(this))
                MessageBox.Show(c.Name);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.