时间:2021-05-20
单例模式是设计模式中最为常见的,不多解释了。但应该尽量避免使用,一般全局管理类才使用单例。
普通泛型单例:
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单例设计模式的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Java泛型的继承和实现操作。分享给大家供大家参考,具体如下:一点睛泛型类和泛型接口被定义后,是可以被继承和实现的。二泛型类的继承1代码class
一、泛型概述1、背景在Java中增加泛型之前,泛型程序设计使用继承来实现的。坏处:需要进行强制类型转换可向集合中添加任意类型的对象,存在风险2、泛型的使用Lis
1.泛型类1.1普通泛型复制代码代码如下:packagetest.lujianing;/***泛型类*@param*/classTest{privateTobj
目前,北京网站建设的类型越来越多,其中包括政企型、营销型、电商型、门户型、高端型、普通型等等多种多样的类别。当然,每一个网站在设计方面的功能模板上还是会不一
泛型类型参数简介在定义泛型类型和泛型方法时,常用到泛型类型参数,泛型类型参数是在实例化泛型时指定类型的占位符。泛型类型参数放在“”内。泛型类型参数命名建议:(1