zoukankan      html  css  js  c++  java
  • 单例类

       1:   
       2:  using System;
       3:  using System.Collections.Generic;
       4:  using System.Text;
       5:  using System.IO;
       6:  using System.Runtime.Serialization.Formatters.Binary;
       7:  using System.Runtime.Serialization;
       8:   
       9:  namespace AkDTH.Common
      10:  {
      11:      /// <summary>
      12:      /// 单例模式泛型类
      13:      /// </summary>
      14:      public sealed class SingleObject<T> where T : new()
      15:      {
      16:          #region GetInstance  采用lock锁定线程判断方式
      17:          static readonly object padlock = new object();
      18:          private static T singleObject = default(T);
      19:          /// <summary>
      20:          /// 单例模式,返回SingleObject实例
      21:          /// </summary>
      22:          /// <returns>返回具体的泛型类</returns>
      23:          public static T GetInstance()
      24:          {
      25:              if (singleObject == null)
      26:              {
      27:                  //利用辅助对象锁定当前线程
      28:                  lock (padlock)
      29:                  {
      30:                      //双重判断服务对象是否为空
      31:                      if (singleObject == null)
      32:                      {
      33:                          singleObject = new T();
      34:                      }
      35:                  }
      36:              }
      37:              return singleObject;
      38:          }
      39:          #endregion
      40:          #region 属性:Instance  第二种单例方法:采用内部嵌套类来延迟产生单例对象
      41:          /// <summary>
      42:          /// 返回单例对象的属性
      43:          /// 只要不访问Instance属性,访问该类中其他方法都不会初始化对象,
      44:          /// 实现了延迟加载
      45:          /// </summary>
      46:          public static T Instance
      47:          {
      48:              get
      49:              {
      50:                  //调用内部嵌套类,利用嵌套类来延迟产生对象实例
      51:                  return Nested.instance;
      52:              }
      53:          }
      54:          /// <summary>
      55:          /// 密封的内部嵌套辅助类,辅助创建单例对象
      56:          /// </summary>
      57:          sealed class Nested
      58:          {
      59:              /// <summary>
      60:              /// 静态化构造方法,避免被new
      61:              /// </summary>
      62:              static Nested()
      63:              {
      64:              }
      65:              /// <summary>
      66:              /// 只读的父类型属性
      67:              /// </summary>
      68:              internal static readonly T instance = new T();
      69:          }
      70:          #endregion
      71:   
      72:   
      73:          
      74:      }
      75:  }
  • 相关阅读:
    [BZOJ 1019][SHOI2008]汉诺塔(递推)
    [BZOJ 1018][SHOI2008]堵塞的交通traffic(线段树)
    [BZOJ 1017][JSOI2008]魔兽地图DotR(树形Dp)
    [BZOJ 1015][JSOI2008]星球大战starwar(并查集+离线)
    [BZOJ 1014][JSOI2008]火星人prefix(Splay+二分+hash)
    Vue脚手架创建项目目录详解
    Vue-cli3 vue.config.js配置详解
    Systemd指令大全
    CentOS7 常用命令集合
    Centos7虚拟机集群配置
  • 原文地址:https://www.cnblogs.com/maomao999/p/3718716.html
Copyright © 2011-2022 走看看