浅谈单例模式

[复制链接]
发表于 2025-11-6 08:37:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
前言

什么是单例模式?
   单例模式,属于创建范例的一种常用的软件计划模式。通过单例模式的方法创建的类在当进步程中只有一个实例(根据须要,也有大概一个线程中属于单例,如:仅线程上下文内利用同一个实例)
  上面是百度百科给出的表明。
各人都知道,面向对象的头脑就是我们可以把一个类实例许多次,每次实例出来的都是一个对象,意味着你可以创建许多个基于这个类的对象。
单例模式,说白了,就是这些对象本质都是同一个,整个步调中,不管在那里用,利用的都是同一个实例对象。
如果我们创建了一个China类,我们可以不停new吗?不可以,由于天下上只有一个China,以是我们利用的都是同一个China对象。
Version 1 - 非线程安全

  1.     public class China
  2.     {
  3.         private China()
  4.         {
  5.         }
  6.         private static China china = null;
  7.         public static China Instance
  8.         {
  9.             get
  10.             {
  11.                 if (china == null)
  12.                 {
  13.                     Console.WriteLine("实例化对象");
  14.                     china = new China();
  15.                 }
  16.                 return china;
  17.             }
  18.         }
  19.     }
复制代码
最简单的实现方式如上图,创建一个私有的静态对象和私有构造方法,然后在CreateInstance方法里,加一个判定,如果为Null,就重新实例化一下,否则直接返回。
这种写法从逻辑上是没题目标,但是是否会出现这个if (china == null)判定,同时实行,如许就贫困了。
以是这种写法在单线程的步调是没题目标,但是在多线程中,是大概会有题目标。
我们做个测试,测试代码如下:
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             for (int i = 0; i < 10; i++)
  6.             {
  7.                 new TaskFactory()
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表