天天看點

樂在其中設計模式(C#) - 單例模式(Singleton Pattern)

樂在其中設計模式(C#) - 單例模式(Singleton Pattern)

介紹

保證一個類僅有一個執行個體,并提供一個通路它的全局通路點。

示例

保證一個類僅有一個執行個體。

Singleton

using System; 

using System.Collections.Generic; 

using System.Text; 

namespace Pattern.Singleton 

        /// <summary> 

        /// 泛型實作單例模式 

        /// </summary> 

        /// <typeparam name="T">需要實作單例的類</typeparam> 

        public class Singleton<T> where T : new() 

        { 

                /// <summary> 

                /// 傳回類的執行個體 

                /// </summary> 

                public static T Instance 

                { 

                        get { return SingletonCreator.instance; } 

                } 

                class SingletonCreator 

                        internal static readonly T instance = new T(); 

        } 

}

Test

using System.Data; 

using System.Configuration; 

using System.Collections; 

using System.Web; 

using System.Web.Security; 

using System.Web.UI; 

using System.Web.UI.WebControls; 

using System.Web.UI.WebControls.WebParts; 

using System.Web.UI.HtmlControls; 

using Pattern.Singleton; 

public partial class Singleton : System.Web.UI.Page 

        protected void Page_Load(object sender, EventArgs e) 

                // 使用單例模式,保證一個類僅有一個執行個體 

                Response.Write(Singleton<Test>.Instance.Time); 

                Response.Write("<br />"); 

                // 不用單例模式 

                Test t = new Test(); 

                Response.Write(t.Time); 

                Test t2 = new Test(); 

                Response.Write(t2.Time); 

public class Test 

        private DateTime _time; 

        public Test() 

                System.Threading.Thread.Sleep(3000); 

                _time = DateTime.Now;         

        public string Time 

                get { return _time.ToString(); } 

運作結果

2007-2-10 22:35:11

2007-2-10 22:35:14

2007-2-10 22:35:17

參考

<a href="http://www.dofactory.com/Patterns/PatternSingleton.aspx" target="_blank">http://www.dofactory.com/Patterns/PatternSingleton.aspx</a>

OK

     本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/344515,如需轉載請自行聯系原作者

繼續閱讀