單例模式的兩種實現方式


//第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; 
           }
 }

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM