在使用unity开发的过程中,我们可能需要创建很多的Manager类,而这些类往往是单例模式的,这样势必需要重复书写许多相同的代码,会十分的麻烦。可以写一个泛型的单例模式,作为众多Manager类的基类,通过继承的方式,就能够省略许多重复的工作。
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.SymbolStore;
using UnityEngine;
//单例泛型类Singleton,where是对T的约束,规定T的类型
public class Singleton<T> : MonoBehaviour where T:Singleton<T>
{
private static T instance;
public static T Instance
{
get { return instance; }
}
protected virtual void Awake()
{
if (instance != null)
{
Destroy(gameObject);
}
else
{
instance = (T)this;
}
}
//判断单例是否进行了初始化
public static bool IsInitialized
{
get { return instance != null; }
}
//销毁
protected virtual void OnDestroy()
{
if (instance == this)
{
instance = null;
}
}
}