前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之单例模式

设计模式之单例模式

作者头像
beginor
发布2020-08-10 14:20:21
2350
发布2020-08-10 14:20:21
举报
文章被收录于专栏:张志敏的技术专栏

设计模式之单例模式

结构

说明

Ensure a class has only one instance, and provide a global point of access to it.

确保一个类只有一个实例,并提供对该实例的全局访问。

适用条件

当类只能有一个实例存在, 并且可以在全局进行访问时, 这个唯一的实例应该可以通过子类实现扩展, 并且用户无需更改代码即可使用。

实现

代码语言:javascript
复制
public class DoublecheckSingleton {

   private volatile static DoublecheckSingleton _instance;

   private DoublecheckSingleton() {
   }

   public static DoublecheckSingleton Instance {
      get {
         if (_instance == null) {
            lock (typeof(DoublecheckSingleton)) {
               if (_instance == null) {
                  Console.WriteLine("Initialize a double check singleton.");
                  _instance = new DoublecheckSingleton();
               }
            }
         }
         return _instance;
      }
   }
}

public class LazySingleton {

   private static readonly Lazy<LazySingleton> LazyInstance = new Lazy<LazySingleton>(() => {
      Console.WriteLine("Initialize a lazy singleton.");
      return new LazySingleton();
   });

   private LazySingleton() {
   }

   public static LazySingleton Instance {
      get {
         return LazyInstance.Value;
      }
   }
}

class Program {

   static void Main(string[] args) {

      for (int i = 0; i < 100; i++) {
         Task.Factory.StartNew(() => Console.WriteLine(DoublecheckSingleton.Instance.ToString()));
      }

      for (int i = 0; i < 100; i++) {
         Task.Factory.StartNew(() => Console.WriteLine(LazySingleton.Instance.ToString()));
      }

      Console.ReadKey();
   }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计模式之单例模式
    • 结构
      • 说明
        • 适用条件
          • 实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档