单例模式的两种实现方式

//第1种实现方式  
 public  class  Singleton
  { 
      private static Singleton Instance=null;
      
      private Singleton(){}
      
      public static Singleton GetInstance()
      {
          if(Instance==null)
            {
               Instance=new SingLeton();
               return Instance;
             }                      
                return Instance;  
       }

   }
//第2种方式
public   class    Singleton<T>
  {
      private static T Instance=null;
         
      private static readonly object locker= new object();
       
      private Singleton(){}
  
      public static T GetInstance()
      {
          lock(locker)
          {
            if(Instance==null)
             {
                  Instance=new T();
                  return Instance;
              }
            }
          return Instance;
       }
//第3种方式
public  class  Singleton<T>
 {
     private static T Instance=null;
      
     private Singleton<T>(){}
      
     public static T GetInstance()
     {
         if(Instance==null)
           {
              Instance=new T();
              return Instance;
            }                     
               return Instance; 
      }
 
  }
//继承MonoBehaviour
//第1种方式
public  class  Singleton<T> : MonoBehaviour
  {
      private static Singleton Instance=null;                 
      public static T GetInstance()
      {
         get          
  { 
             if(Instance==null)
               {
                    Instance=FindObjectOfType(typeof(Singleton)) as Singleton;
                    return Instance;
               }                     
              return Instance; 
       }
 
   }
1
//第2种方式
public  class  Singleton<T> : MonoBehaviour
 {
      private static T Instance=null;                 
      public static T GetInstance()
      {
         get       
          {
               if(Instance==null)
               {
                     GameObject go=GameObject.Find("DDOL");                 
                     if(go==null)                 
                      {     
                          go=new GameObject("DDOL");                          
                          DontDestroyOnLoad(go);   
                      }
                      Instance =go.GetComponent<T>              
                      if(Instance==null)       
                      {                    
                      Instance=go.AddComponent<T>();       
                      }
                      return Instance;
                }                     
                return Instance; 
           }
 }

  

  

 

转载于:https://www.cnblogs.com/clhxxlcj/p/10916779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值