Unity学习日记(十二) C#泛型单例模式
来源:互联网 发布:喀秋莎屏幕录制软件 编辑:程序博客网 时间:2024/05/14 22:03
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。因此单例模式的类在软件运行时有且仅有一个的类实例,而且这个类面向整个系统提供使用。那么需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。在游戏中有些类仅需要一个实例,而且我们又需要随时随地的访问的类,这时候我们就可以考虑使用单例模式。如:游戏中的音乐管理类,游戏中的场景管理类,游戏中的玩家信息管理类。事实上,这些类并不需要经常性实例化的,但是又是十分重要。
那么我们经常会用到的单例模式那些写法,这里就简单的列举一下:
1、
using UnityEngine;using System.Collections;public class Main : MonoBehaviour{ public static Main instance; // Use this for initialization void Awake() { instance = this; } // Update is called once per frame void Update() { }}
2、
using UnityEngine;using System.Collections;public class Main : MonoBehaviour{ private static Main m_instance; public static Main instance { get { if(m_instance == null) m_instance = FindObjectOfType<Main>(); return m_instance; } } // Use this for initialization void Awake() { m_instance = FindObjectOfType<Main>(); } // Update is called once per frame void Update() { }}
这不难发现如果每一单例类都要这样写,肯定非常麻烦,有什么办法可以省去这些不必要的代码呢?
有,那就是面向对象最重要的思想:继承。
using UnityEngine; using System.Collections; //单例模板 public abstract class Singleton<T>:MonoBehaviour where T : MonoBehaviour //对泛型进行约束,泛型只能是MonoBehaviour { private static T m_instance = null; public static T Instance { get { return m_instance; } } protected virtual void Awake() { m_instance = this as T; } }
这里我们只对MonoBehavior类进行单例模板化,那么想其他类型的类也可以单例化,我们继续改写一下这个单例类。
public abstract class Singleton<T> where T : new(){ private static T m_instance = default(T); public static T instance { get { if (m_instance == null) m_instance = new T(); return m_instance; } }}
这样我们只需要继承这个类就可以进行单例。
0 0
- Unity学习日记(十二) C#泛型单例模式
- 嵌入式学习日记(十二)
- Java学习日记(十二)反射
- Unity学习(十二): 平滑差值
- C#设计模式(十二)命令模式
- Unity 3D学习日记(1)
- Unity 3D学习日记(2)
- Unity 3D学习日记(3)
- Unity 3D学习日记(4)
- Unity 3D学习日记(5)
- Unity 3D学习日记(6)
- swift学习日记(十二) 泛型
- Unity学习日记
- unity学习日记-协程
- Unity学习日记
- C#学习笔记(十二):事件进阶
- 【Unity 3D】学习笔记十二:GUILayout(界面布局)
- Unity学习日记-hello world
- 设计模式探索——桥接模式
- tomcat同时部署两个项目错误
- 美国大学专业排名一目了然 备战雅思是梦想实现的第一步
- MD5,base64 等加密和转码工具
- JVM调优总结(六)-分代垃圾回收详述2
- Unity学习日记(十二) C#泛型单例模式
- 消除尾一
- MyBatis循环获取Map中的key和value的方法
- 微信公众帐号开发教程第12篇-符号表情的发送(下)
- Linux下安装tar.gz类型的jdk,并配置环境变量
- 关于有偿提供拼图响应式后台的通知
- MySQL性能测试工具之mysqlslap使用详解
- 深入理解Java国际化
- PHP基础教程十七之会话技术COOKIE、SESSION