Unity设计模式——单例模式与单例框架

平常在我们的项目中 经常会需要用到 xxxManager 诸如此类的管理类 此时我们则需要有一个单例类来进行相对应的管理

普通的单例类我们一般这样来创建

public class SingleTon : MonoBehaviour
{
    private static SingleTon Instance = null;

    //防止外界New
    private SingleTon()
    {

    }

    private void Awake()
    {
        Instance = this;
    }

}

但当我们发现 在稍具规模的项目中会有若干个Manager 去分别管理着它们所需要的模块 那么 此时我们就需要重复的去写上面的代码 十分的麻烦 并不简洁 那么我们使用单例框架则可以灵活的解决此问题

单例框架 第一种 需要继承并挂载在游戏物体上 那么我们必须要先继承MonoBehaviour

//这里的where T 是泛型约束 下文会讲一下什么是泛型约束
public class SingleTon<T> : MonoBehaviour where T : SingleTon<T>
{
    public static T Instance
    {
        get;
        private set;
    }

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = (T)this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }

}

单例框架 第二种 不需要继承并挂载在游戏物体

public class SingleScript<T> where T : new()
{
    private static T instance = default(T);

    public static T GetInstance()
    {
        if (instance == null)
        {
            instance = new T();
        }
        return instance;
    }
}

这里来解释一下 什么是泛型约束(泛型限定) 关键字 where T

.Net支持的类型参数约束有以下几种:

写法 所表示的作用
where T : struct T 必须是一个结构体类型
where T : class T 必须是一个Class类型
where T : new() T 必须要有一个无参构造函数
where T : NameOfBaseClass T 必须继承名为 NameOfBaseClass 的类
where T : NameOfinterface T 必须实现名为 NameOfinterface 的接口

你可能感兴趣的:(Unity3D)