欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity通用泛型單例設(shè)計模式(普通型和繼承自MonoBehaviour)

 更新時間:2020年07月18日 09:14:06   作者:汐夜  
這篇文章主要介紹了Unity通用泛型單例設(shè)計模式,分為普通型和繼承MonoBehaviour,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

單例模式是設(shè)計模式中最為常見的,不多解釋了。但應(yīng)該盡量避免使用,一般全局管理類才使用單例。

普通泛型單例:

public abstract class Singleton<T> where T : class, new()
{
  private static T instance = null;

  private static readonly object locker = new object();

  public static T Instance
  {
    get
    {
      lock (locker)
      {
        if (instance == null)
          instance = new T();
        return instance;
      }
    }
  }
}

繼承MonoBehaviour的泛型單例:

using UnityEngine;

public abstract class MonoSingleton <T>: MonoBehaviour where T:MonoBehaviour
{
  private static T instance = null;

  private static readonly object locker = new object();

  private static bool bAppQuitting;

  public static T Instance
  {
    get
    {
      if (bAppQuitting)
      {
        instance = null;
        return instance;
      }

      lock (locker)
      {
        if (instance == null)
        {
          instance = FindObjectOfType<T>();
          if (FindObjectsOfType<T>().Length > 1)
          {
            Debug.LogError("不應(yīng)該存在多個單例!");
            return instance;
          }

          if (instance == null)
          {
            var singleton = new GameObject();
            instance = singleton.AddComponent<T>();
            singleton.name = "(singleton)" + typeof(T);
            singleton.hideFlags = HideFlags.None;
            DontDestroyOnLoad(singleton);
          }
          else
            DontDestroyOnLoad(instance.gameObject);
        }
        instance.hideFlags = HideFlags.None;
        return instance;
      }
    }
  }

  private void Awake()
  {
    bAppQuitting = false;
  }

  private void OnDestroy()
  {
    bAppQuitting = true;
  }
}

使用方法直接用類去繼承這兩個抽象單例即可,使用T.Instance就可以直接取得該類(T)的唯一實例了。

以上就是Unity通用泛型單例設(shè)計模式(普通型和繼承自MonoBehaviour)的詳細(xì)內(nèi)容,更多關(guān)于unity單例設(shè)計模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于C#編寫一個接受圖片流的OCR識別接口

    基于C#編寫一個接受圖片流的OCR識別接口

    這篇文章主要為大家詳細(xì)介紹了如何使用C#寫一個接受圖片流的OCR識別接口,以及測試用例調(diào)用接口,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • C#遞歸讀取XML菜單數(shù)據(jù)的方法

    C#遞歸讀取XML菜單數(shù)據(jù)的方法

    這篇文章主要介紹了C#遞歸讀取XML菜單數(shù)據(jù)的方法,涉及遞歸的操作技巧與C#窗體的用法,對于進(jìn)行C#項目開發(fā)具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • 詳解二維碼生成工廠

    詳解二維碼生成工廠

    本篇文章主要分享的是3個免費的二維碼接口的對接代碼和測試得出的注意點及區(qū)別。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • 如何用C#驗證IP是否為局域網(wǎng)地址

    如何用C#驗證IP是否為局域網(wǎng)地址

    這篇文章主要介紹了如何用C#驗證IP是否為局域網(wǎng)地址,文中講解非常細(xì)致,代碼幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#中的高階函數(shù)介紹

    C#中的高階函數(shù)介紹

    這篇文章主要介紹了C#中的高階函數(shù)介紹,本文講解了接受函數(shù)、輸出函數(shù)、Currying(科里化)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • c#獲取windows桌面背景代碼示例

    c#獲取windows桌面背景代碼示例

    這篇文章主要介紹了c#獲取windows桌面背景的方法,大家參考使用吧
    2013-12-12
  • C#調(diào)用sql2000存儲過程方法小結(jié)

    C#調(diào)用sql2000存儲過程方法小結(jié)

    這篇文章主要介紹了C#調(diào)用sql2000存儲過程的方法,以實例形式分別對調(diào)用帶輸入?yún)?shù)及輸出參數(shù)的存儲過程進(jìn)行了詳細(xì)分析,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C# HttpClient Post參數(shù)同時上傳文件的實現(xiàn)

    C# HttpClient Post參數(shù)同時上傳文件的實現(xiàn)

    這篇文章主要介紹了C# HttpClient Post參數(shù)同時上傳文件的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Quartz.Net使用方法詳解

    Quartz.Net使用方法詳解

    本文詳細(xì)講解了Quartz.Net的使用方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 淺析C# 委托(Delegate)

    淺析C# 委托(Delegate)

    這篇文章主要介紹了C# 委托(Delegate)的相關(guān)資料,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論