网站建设空心正方形,安徽 电子政务网站定制,互联网营销的五个手段,域名备案和网站备案有什么不同单例模式
1. 基础
定义#xff1a;单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时#xff0c;为了防止频繁地创建对象使得内存飙升#xff0c;单例模式可以让程序仅在内存中创建一个对象#xff0c;让所有需要调用的地…单例模式
1. 基础
定义单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时为了防止频繁地创建对象使得内存飙升单例模式可以让程序仅在内存中创建一个对象让所有需要调用的地方都共享这一单例对象。在Unity的编程中比如①用于输入管理的InputManager②时间中心EventSystem等这类具有很强且频繁功能的组件往往会写成单例的模式。
类型单例模式可分为懒汉模式和饿汉模式两种本文不做详细讲述。 懒汉式在真正需要使用对象时才去创建该单例类对象 饿汉式在类加载时已经创建好该单例对象等待被程序使用
代码一个C#单例模式的代码如下其定义了一个class T的一个单例
using System;namespace UnityLearn
{public class SingleTwhere T: class{private static T _instance;// 没有实例时创建一个实例有的话返回创造过的那个实例public static T Instance{get{if (_instance null){Type type typeof(T);_instance Activator.CreateInstance(type, true) as T;}return _instance;}}protected Single(){}}
}在实际使用时如想创建一个Class的单例可直接使用以下方式
public class A : SingleA
{// 类内容
}2. SingleMono
但是我们在Unity中往往都会用到MonoBehavior此时需要将单例代码稍加修改 public class SingleMonoT : MonoBehaviourwhere T: SingleMonoT{protected static T instance;// 创建一个GameObject也是单例的private static GameObject go;public static T Instance{get{// 在创建时也会检查goif (instance null){if (!go){// go不存在时先Find找不到的话再创建go GameObject.Find(SingletonMono);if (!go){go new GameObject(SingletonMono);}// 不被销毁DontDestroyOnLoad(go);// 从物体上获得单例instance go.GetComponentT();// 物体上没有单例时添加一个单例if (!instance){instance go.AddComponentT();}}}return instance;}}}实际使用时用法类似
public class A : SingleMonoA
{// 类内容
}代码中的where T: SingleMonoT我也难以理解是什么意思有知道的朋友请答疑解惑不胜感激。