C#单例模式(Singleton Pattern)实例教程

作者:shichen2014 时间:2022-11-23 10:44:05 

本文以实例形式讲述了C#单例模式(Singleton Pattern)的实现方法,分享给大家供大家参考。具体实现方法如下:

一般来说,当从应用程序全局的角度来看,如果只允许类的一个实例产生,就可以考虑单例模式。

1.即时加载的单例模式

把类的实例赋值给类的一个静态字段。


class Program
{
   static void Main(string[] args)
   {
     Logger log = Logger.GetInstance();
     log.WriteToFile();
     Console.Read();
   }
}
public class Logger
{
   private static Logger logger = new Logger();
   private Logger(){}
   public static Logger GetInstance()
   {
     return logger;
   }
   public void WriteToFile()
   {
     Console.WriteLine("错误被写入文件了~~");
   }
}

2.延迟加载的单例模式

直到调用类的静态方法,才产生类的实例。


public class Logger
{
   private static Logger logger = null;
   private Logger(){}
   public static Logger GetInstance()
   {
     if (null == logger)
     {
       logger = new Logger();
     }
     return logger;
   }
   public void WriteToFile()
   {
     Console.WriteLine("错误被写入文件了~~");
   }
}

3.线程安全的单例模式

直到调用类的静态方法,保证只有一个线程进入产生类的实例。


public class Logger
{
   private static Logger logger = null;
   private static object lockObj = new object();
   private Logger(){}
   public static Logger GetInstance()
   {
     lock (lockObj)
     {
       if (logger == null)
       {
         logger = new Logger();
       }
       return logger;
     }
   }
   public void WriteToFile()
   {
     Console.WriteLine("错误被写入文件了~~");
   }
}

总结:静态单例类型的私有字段,私有构造函数,获取单例的方法是构成单例模式的3个必要元素。希望本文所述对大家的C#程序设计有所帮助。

标签:C#,单例,模式
0
投稿

猜你喜欢

  • Java 数据结构与算法系列精讲之时间复杂度与空间复杂度

    2022-03-19 20:19:50
  • MyBatis-Plus多表联查(动态查询)的项目实践

    2023-11-19 21:43:17
  • 解决Weblogic部署war找不到spring配置文件的问题

    2022-12-29 07:03:08
  • 详解SpringBoot迭代发布JAR瘦身配置

    2021-11-14 19:10:48
  • Android MediaPlayer实现音乐播放器实例代码

    2021-05-26 22:58:05
  • Java如何处理延迟任务过程解析

    2022-04-29 15:11:37
  • Android编程实现ListView滚动提示等待框功能示例

    2022-11-15 13:50:15
  • Android开发之ListView的head消失页面导航栏的渐变出现和隐藏

    2022-03-02 14:25:24
  • Unity实现简单虚拟摇杆

    2023-08-04 17:33:09
  • C#实现的三种模拟自动登录和提交POST信息的方法

    2022-05-28 01:49:32
  • 简单实现Android闹钟功能

    2022-05-23 16:17:53
  • springmvc限流拦截器的示例代码

    2021-09-08 02:50:55
  • Flutter源码分析之自定义控件(RenderBox)指南

    2022-09-08 21:17:28
  • Java多线程Thread基础学习

    2023-04-17 17:12:21
  • Java 并发编程之线程挂起、恢复与终止

    2022-02-18 11:51:51
  • Android编程中自定义dialog用法实例

    2023-05-10 07:21:37
  • Java基础之练习打印三角形

    2023-08-25 05:39:33
  • C# 正则表达式进阶

    2022-12-26 01:56:32
  • C#9新特性之增强的模式匹配

    2023-04-16 07:35:34
  • c# 编写的简单飞行棋游戏

    2022-12-05 05:10:59
  • asp之家 软件编程 m.aspxhome.com