using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 单利模式;不继承mono的单利模式
/// </summary>
public abstract class Singleton<T>where T :new() {
public static T instance;
static Object _lock;
public static T Instance
{
get{
if(instance == null){
//加锁:控制一个时间内只有一个线程访问
// lock(_lock)
{
if(instance == null){
instance = new T();
}
}
}
return instance;
}
}
}
public abstract class Singleton2<T> : MonoBehaviour where T : MonoBehaviour
{
private static string MonoSingletionName = "MonoSingletionRoot";
private static GameObject MonoSingletionRoot;
private static T instance;
public static T Instance
{
get
{
if (MonoSingletionRoot == null)//如果是第一次调用单例类型就查找所有单例类的总结点
{
MonoSingletionRoot = GameObject.Find(MonoSingletionName);
if (MonoSingletionRoot == null)//如果没有找到则创建一个所有继承MonoBehaviour单例类的节点
{
MonoSingletionRoot = new GameObject();
MonoSingletionRoot.name = MonoSingletionName;
}
}
if (instance == null)//为空表示第一次获取当前单例类
{
instance = MonoSingletionRoot.GetComponent<T>();
if (instance == null)//如果当前要调用的单例类不存在则添加一个
{
instance = MonoSingletionRoot.AddComponent<T>();
}
}
return instance;
}
}
}