[Unity] No.1 Single单例模式
单例模式
1. 基础
定义:单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。在Unity的编程中比如①用于输入管理的InputManager;②时间中心EventSystem等,这类具有很强且频繁功能的组件往往会写成单例的模式。
类型:单例模式可分为懒汉模式和饿汉模式两种,本文不做详细讲述。
懒汉式:在真正需要使用对象时才去创建该单例类对象;
饿汉式:在类加载时已经创建好该单例对象,等待被程序使用;
代码:一个C#单例模式的代码如下,其定义了一个class T的一个单例
using System;namespace UnityLearn
{public class Single<T>where 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 : Single<A>
{// 类内容
}
2. SingleMono
但是我们在Unity中往往都会用到MonoBehavior,此时需要将单例代码稍加修改:
public class SingleMono<T> : MonoBehaviourwhere T: SingleMono<T>{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.GetComponent<T>();// 物体上没有单例时添加一个单例if (!instance){instance = go.AddComponent<T>();}}}return instance;}}}
实际使用时用法类似:
public class A : SingleMono<A>
{// 类内容
}
代码中的where T: SingleMono<T>我也难以理解是什么意思,有知道的朋友请答疑解惑,不胜感激。
相关文章:
[Unity] No.1 Single单例模式
单例模式 1. 基础 定义:单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地…...
【chatGPT知识分享】Flutter web 性能优化基础入门
简介 Flutter 是 Google 在这里插入代码片公司推出的跨平台移动应用开发框架,支持 Android、iOS 和 Web 等多个平台。Flutter Web 是 Flutter 在 Web 平台上的应用,可以开发具有良好用户体验的网站。但是,由于 Web 环境的特殊性,…...
探索Qt折线图之美:一次详尽的多角度解析
探索Qt折线图之美:一次详尽的多角度解析 第一章:Qt折线图的基本概念与应用场景(Basic Concepts and Applications of Qt Line Charts)1.1 Qt折线图简介(Introduction to Qt Line Charts)1.2 Qt折线图的应用…...
minio集群部署,4台服务器+1台nginx
4台主机1台nginx负载均衡 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,即:用户名和密码 分布式Minio存放数据的磁盘目录必须是空目录 分布式Minio官方建议生产环境最少4个节点,因为有N个节点,得至少保证有N/2的节…...
实例分割算法BlendMask
实例分割算法BlendMask 论文地址:https://arxiv.org/abs/2001.00309 github代码:https://github.com/aim-uofa/AdelaiDet 我的个人空间:我的个人空间 密集实例分割 密集实例分割主要分为自上而下top-down与自下而上bottom-up两类方法…...
多线程、智能指针以及工厂模式
目录 一、unique_lock 二、智能指针 (其实是一个类) 三、工厂模式 一、unique_lock 参考文章【1】,了解unique_lock与lock_guard的区别。 总结:unique_lock使用起来要比lock_guard更灵活,但是效率会第一点,内存的…...
初探 VS Code + Webview
本文作者为 360 奇舞团前端开发工程师 介绍 VSCode 是一个非常强大的代码编辑器,而它的插件也非常丰富。在开发中,我们经常需要自己编写一些插件来提高开发效率。本文将介绍如何开发一个 VSCode 插件,并在其中使用 Webview 技术。首先介绍一下…...
Codeforces Round 864 (Div. 2)(A~D)
A. Li Hua and Maze 给出两个不相邻的点,最少需要堵上几个方格,才能使得两个方格之间不能互相到达。 思路:显然,对于不邻任何边界的方格来说,最少需要的是4,即上下左右都堵上;邻一个边界就-1&a…...
第3章-运行时数据区
此章把运行时数据区里比较少的地方讲一下。虚拟机栈,堆,方法区这些地方后续再讲。 转载https://gitee.com/youthlql/JavaYouth/tree/main/docs/JVM。 运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分,…...
delta.io 参数 spark.databricks.delta.replaceWhere.constraintCheck.enabled
总结 默认值true 你写入的df分区字段必须全部符合覆盖条件 .option("replaceWhere", "c2 == 2") false: df1 overwrite tb1: df1中每个分区的处理逻辑: - tb1中存在(且谓词中匹配)的分区,则覆盖 - tb1中存在(谓词中不匹配)的分区,则append - tb1中不存…...
Redis知识点
1. Redis-常用数据结构 Redis提供了一些数据结构供我们往Redis中存取数据,最常用的的有5种,字符串(String)、哈希(Hash)、列表(list)、集合(set)、有序集合(zset…...
经典数据结构之2-3树
2-3树定义 2-3树,是最简单的B-树,其中2、3主要体现在每个非叶子节点都有2个或3个子节点,B-树即是平衡树,平衡树是为了解决不平衡树查询效率问题,常见的二叉平衡书有AVL树,它虽然提高了查询效率,…...
Numpy从入门到精通——节省内存|通用函数
这个专栏名为《Numpy从入门到精通》,顾名思义,是记录自己学习numpy的学习过程,也方便自己之后复盘!为深度学习的进一步学习奠定基础!希望能给大家带来帮助,爱睡觉的咋祝您生活愉快! 这一篇介绍《…...
Docker-compose 启动 lnmp 开发环境
GitHub传送阵 docker-lnmp 项目帮助开发者快速构建本地开发环境,包括Nginx、PHP、MySQL、Redis 服务镜像,支持配置文件和日志文件映射,不限操作系统;此项目适合个人开发者本机部署,可以快速切换服务版本满足学习服务新…...
《android源码阅读四》Android系统源码整编、单编并运行到虚拟机
1、编译环境 《安装Ubuntu系统》《android源码下载》 2、整编源码 进入Android源码根目录 cd AOSP初始化环境 source build/envsetup.sh清除缓存 make clobber选择编译目标 // 选择编译目标 lunch // 因为本次是在虚拟机中运行,这里使用x86 lunch aosp_x86_6…...
深度学习技巧应用8-各种数据类型的加载与处理,并输入神经网络进行训练
大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用8-各种数据类型的加载与处理,并输入神经网络进行训练。在模型训练中,大家往往对各种的数据类型比较难下手,对于非结构化数据已经复杂的数据的要进行特殊处理,这里介绍一下我们如何进行数据处理才能输入到模型中,进…...
【笔试】备战秋招,每日一题|20230415携程研发岗笔试
前言 最近碰到一个专门制作大厂真题模拟题的网站 codefun2000,最近一直在上面刷题。今天来进行2023.04.15携程研发岗笔试,整理了一下自己的思路和代码。 比赛地址 A. 找到you 题意: 给定一个仅包含小写字母的 n n n\times n nn 的矩阵…...
【unity专题篇】—GUI(IMGUI)思维导图详解
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:uni…...
【C++ Metaprogramming】0. 在C++中实现类似C#的泛型类
两年前,笔者因为项目原因刚开始接触C,当时就在想,如果C有类似C#中的泛型限定就好了,能让代码简单许多。我也一度认为: 虽然C有模板类,但是却没办法实现C#中泛型特有的 where 关键词: public c…...
TDA4VM/VH 芯片 NAVSS0
请从官网下载 TD4VM 技术参考手册,地址如下: TDA4VM 技术参考手册地址 概述 (NAVSS0 的介绍在 TRM 的第10.2章节) NAVSS0 可以看作 MAIN 域的一个复杂外设域,实现如下功能: UDMASS: DMA 管理子系统;MODSS…...
告别‘偏科’模型:用CAST双流架构搞定视频动作识别,兼顾时空理解
时空双流协同:CAST架构如何重塑视频动作识别的平衡之道 视频动作识别正面临一个关键瓶颈——现有模型往往在时空理解上"偏科"。就像人类大脑需要左右半球协同工作才能完整理解世界一样,理想的视频理解模型也需要同时具备敏锐的空间感知和精准的…...
Angular-dragdrop与Bootstrap集成:构建响应式拖放界面的完美方案
Angular-dragdrop与Bootstrap集成:构建响应式拖放界面的完美方案 【免费下载链接】angular-dragdrop Implementing jQueryUI Drag and Drop functionality in AngularJS (with Animation) is easier than ever 项目地址: https://gitcode.com/gh_mirrors/an/angul…...
用GEE和Landsat 8数据,5步搞定城市生态健康“体检报告”(附完整代码)
城市生态健康体检实战:用GEE和Landsat 8生成可视化评估报告 城市规划师和环保工作者常常需要快速评估城市生态状况,但传统方法耗时费力。Google Earth Engine(GEE)平台结合Landsat 8数据,为我们提供了一种高效解决方案…...
别再只会Hello World了!用Hadoop 3.x + Eclipse手把手搞定你的第一个MapReduce词频统计
从Hello World到实战:用Hadoop 3.x实现你的第一个词频统计项目 当你第一次接触编程时,"Hello World"可能是你学会的第一个程序。这个简单的程序让你理解了如何让计算机输出一段文字。但编程的世界远不止于此,特别是当你开始探索大数…...
【C++】模板进阶全内容,一篇搞定所有!!!
文章目录1. 非类型模板参数补充:array静态数组array<int,10> a1;和int arr[10];的区别2.模板的特化2.1 概念2.2 函数模板特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化2.3.3 类模板特化应用示例3.模板分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法…...
用Python和Matplotlib搞定高光谱图像可视化:从.mat文件到伪彩色图(附完整代码)
PythonMatplotlib高光谱图像可视化实战:从.mat文件到伪彩色合成 高光谱图像处理正逐渐从专业遥感领域走向更广泛的工业应用场景。当一位农业科技公司的算法工程师第一次拿到作物生长监测的高光谱数据时,面对.mat格式文件中那个神秘的三维矩阵,…...
写给前端的 CANN-ops-transformer:昇腾Transformer进阶算子库到底是啥?
写给前端的 CANN-ops-transformer:昇腾Transformer进阶算子库到底是啥? 之前有兄弟跑大模型,问我:“哥,我想 用 FlashAttention,但 ATB 太重了,有没有轻量点的库?” 好问题。今天来说…...
龙芯3A5000开发板PMON升级UEFI固件实战指南
1. 项目概述:从“能用”到“好用”的固件升级之路最近折腾了一块搭载龙芯3A5000处理器的开发板,型号是迅为的LS3A5000。拿到手的时候,板子预装的固件还是传统的PMON。PMON对于玩龙芯的老朋友来说不陌生,它功能稳定,但界…...
别再踩坑了!手把手教你解决RPM安装时的‘.rpm.lock’事务锁定报错
RPM事务锁机制深度解析:从原理到避坑实战 在Linux系统管理中,RPM包管理器的.rpm.lock报错堪称经典"拦路虎"——据统计,超过63%的运维人员至少遭遇过一次这类锁定问题。这个看似简单的错误背后,隐藏着RPM设计精妙的事务隔…...
00000
0...
