• 二十四种设计模式:单例模式(Singleton Pattern)


    单例模式(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;
    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 />");
            Response.Write(Singleton<Test>.Instance.Time);
            Response.Write("<br />");
    
            // 不用单例模式
            Test t = new Test();
            Response.Write(t.Time);
            Response.Write("<br />");
            Test t2 = new Test();
            Response.Write(t2.Time);
            Response.Write("<br />");
        }
    }
    
    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:11
      2007-2-10 22:35:14
      2007-2-10 22:35:17

  • 相关阅读:
    帮同事整理的 C# 调用 C++ 回调函数
    解决VS2010下使用NUnit 无法进行调试的问题
    Linux /var/log/messages 偶尔会发生time reset +6.288863s
    linux设置静态路由
    os auto installtion
    read 在bash ksh下的不同表现
    C#编码规范1
    C#中new一个对象时,发生了什么事?
    C# 实例化类的执行顺序
    C#类注释规范
  • 原文地址:https://www.cnblogs.com/taotaodetuer/p/6182392.html
Copyright © 2020-2023  润新知