基于静态Singleton模式的使用介绍

所属分类: 软件编程 / C#教程 阅读数: 123
收藏 0 赞 0 分享

什么是静态单例模式?

静态单例模式(Static Singleton Pattern)是我在实践中总结的模式,主要解决的问题是在预先知道某依赖项为单例应用时,通过静态缓存该依赖项来提供访问。当然,解决该问题的办法有很多,这只是其中一个。

实现细节

复制代码 代码如下:

/// <summary>
  /// 静态单例
  /// </summary>
  /// <typeparam name="TClass">单例类型</typeparam>
  public static class Singleton<TClass> where TClass : class, new()
  {
    private static readonly object _lock = new object();
    private static TClass _instance = default(TClass);

    /// <summary>
    /// 获取单例实例
    /// </summary>
    public static TClass GetInstance()
    {
      return Instance;
    }

    /// <summary>
    /// 单例实例
    /// </summary>
    public static TClass Instance
    {
      get
      {
        if (_instance == null)
        {
          lock (_lock)
          {
            if (_instance == null)
            {
              _instance = new TClass(); // must be public constructor
            }
          }
        }

        return _instance;
      }
    }

    /// <summary>
    /// 设置单例实例
    /// </summary>
    /// <param name="instance">单例实例</param>
    public static void Set(TClass instance)
    {
      lock (_lock)
      {
        _instance = instance;
      }
    }

    /// <summary>
    /// 重置单例实例
    /// </summary>
    public static void Reset()
    {
      lock (_lock)
      {
        _instance = default(TClass);
      }
    }
  }


应用测试
复制代码 代码如下:

class Program
  {
    interface IInterfaceA
    {
      string GetData();
    }
    class ClassA : IInterfaceA
    {
      public string GetData()
      {
        return string.Format("This is from ClassA with hash [{0}].", this.GetHashCode());
      }
    }
    static void Main(string[] args)
    {
      string data1 = Singleton<ClassA>.GetInstance().GetData();
      Console.WriteLine(data1);
      string data2 = Singleton<ClassA>.GetInstance().GetData();
      Console.WriteLine(data2);

      Console.ReadKey();
    }
  }


测试结果

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多