Unity通用泛型单例设计模式(普通型和继承自MonoBehaviour)
程序员文章站
2022-08-30 18:30:50
单例模式是设计模式中最为常见的,不多解释了。但应该尽量避免使用,一般全局管理类才使用单例。普通泛型单例:public abstract class singleton where t...
单例模式是设计模式中最为常见的,不多解释了。但应该尽量避免使用,一般全局管理类才使用单例。
普通泛型单例:
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("不应该存在多个单例!"); 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通用泛型单例设计模式(普通型和继承自monobehaviour)的详细内容,更多关于unity单例设计模式的资料请关注其它相关文章!