UIFramework之通用单例类Singleton

本文介绍了一种在Unity中实现单例模式的方法,通过两个通用类:SingletonManager和MonoSingletonManager,简化了单例模式的使用。适用于不同场景的需求。

UIFramework之通用单例类Singleton

在Unity的开发中,单例模式是最经常使用的设计模式之一,在每个模块开发中,如果都单独去实现单例模式,会很繁琐,所以实现一个Singleton类,每个需要实现单例模式的模块只需要集成自该类,即可。

[csharp]  view plain  copy
 print ?
  1. /* 
  2. * Name: SingletonManager.cs 
  3. * Function: N/A  
  4.  
  5. * Ver     变更日期               负责人                            变更内容 
  6. * ────────────────────────────────────────────────────────────────────── 
  7. * V1.0.0  $time$    http://blog.youkuaiyun.com/husheng0      
  8.  
  9. * Copyright (c). All rights reserved. 
  10. * 
  11. * 单例类 
  12.  
  13. */  
  14.   
  15. using UnityEngine;  
  16. using System.Collections;  
  17. /// <summary>  
  18. /// 单例管理类的实现,不继承Monobehaviour  
  19. /// </summary>  
  20. /// <typeparam name="T"></typeparam>  
  21. public class SingletonManager<T> where T : class,new()  
  22. {  
  23.   
  24.     protected static T instance = null;  
  25.   
  26.     public static T Instance  
  27.     {  
  28.         get  
  29.         {  
  30.             if (null == instance)  
  31.             {  
  32.                 instance = new T(); //调用构造函数    
  33.             }  
  34.             return instance;  
  35.         }  
  36.     }  
  37.     /// <summary>  
  38.     /// SingletonManager构造函数  
  39.     /// </summary>  
  40.     protected SingletonManager()  
  41.     {  
  42.         if (null != instance)  
  43.             Debug.Log("This " + (typeof(T)).ToString()   
  44. " Singleton Instance is not null!");  
  45.         Init();  
  46.     }  
  47.     public virtual void Init() { }  
  48. }  
[csharp]  view plain  copy
 print ?
  1. /* 
  2. * Name: MonoSingletonManager.cs 
  3. * Function: N/A  
  4.  
  5. * Ver     变更日期               负责人                            变更内容 
  6. * ────────────────────────────────────────────────────────────────────── 
  7. * V1.0.0  $time$    http://blog.youkuaiyun.com/husheng0      
  8.  
  9. * Copyright (c). All rights reserved. 
  10. * 
  11. * 单例类  
  12.  
  13. */  
  14.   
  15. using UnityEngine;  
  16. using System.Collections;  
  17. /// <summary>  
  18. /// 单例管理类的实现,继承Monobehaviour  
  19. /// 该类会在Hierarchy下创建"___MonoSingleton"并把所有的集成MonoSingletonManager的脚本添加到"___MonoSingleton"上  
  20. /// </summary>  
  21. /// <typeparam name="T"></typeparam>  
  22. public class MonoSingletonManager<T> : MonoBehaviour where T : MonoSingletonManager<T>  
  23. {  
  24.   
  25.     private static T instance = null;  
  26.   
  27.     public static T Instance  
  28.     {  
  29.         get  
  30.         {  
  31.             if (null == instance)  
  32.             {  
  33.                 GameObject go = GameObject.Find("___MonoSingleton");  
  34.                 if (null == go)  
  35.                 {  
  36.                     go = new GameObject("___MonoSingleton");  
  37.                     DontDestroyOnLoad(go);  
  38.                 }  
  39.                 instance = go.AddComponent<T>();  
  40.   
  41.             }  
  42.             return instance;  
  43.         }  
  44.     }  
  45.   
  46.     /// <summary>  
  47.     /// Raises the application quit event.  
  48.     /// </summary>  
  49.     private void OnApplicationQuit()  
  50.     {  
  51.         instance = null;  
  52.     }  
  53. }  

=====================================================================

结束。

上位机面试题 C#-IOC框架 什么是值类型和引用类型他们的本质区别是 抽象类和接口的区别 什么是委托他和事件有什么区别 IOC依赖注入怎么注入 C#集合简单介绍 简单阐述一下C#GC垃圾回收机制 依赖注入的核心思想 依赖注入的三个生命周期 Netcore 1.可以简单简述一下什么是中间件吗,中间的redis能简单阐述一下吗 2.JWT是个什么机制? 3.讲一下过滤器和中间件的区别 4.什么是landam表达式 5.讲述一下C#里的集合,如果频繁进行增删查改操作需要用到什么集合 6.什么是泛型,为什么需要使用泛型 7.多态是什么 8.C#重载是什么 9.接口和抽象类的区别 10.值类型和引用类型的本质区别 11.什么是装箱?什么是拆箱? 12.讲一下为什么要推荐面向接口编程 13.设计模式有了解吗 WPF 1.依赖属性的应用,什么是依赖属性 2.WPF里面的命令是什么?有什么作用 3.浅谈一下mvvm模型 4.讲述你常用ORM框架 5.WPF的动画如何实现?(动画监听) 6.WPF用户控件如何进行绑定,你有封装过吗? 7. 多线程 讲一下为什么要用多线程,多线程的关键字是什么 如何保证多线程同步机制 如果我要采集500台机器,你怎么防止网络堵塞,和保证数据的实时采集 通讯协议 1.简述一下串口通讯协议 2.Modbus协议是什么 3.西门子S7通讯协议是怎么样的 4.简单阐述一下TCP三次握手协议 数据库 1.数据库索引 2.索引的数据结构 3.索引采用什么数据结构存储,在不同的数据库引擎中 4.浅谈一下数据库里面视图,存储过程。 UML 讲述一下软件生命周期步骤 分别解答下上述面试问题
最新发布
08-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值