[Unity] No.1 Single单例模式

这篇具有很好参考价值的文章主要介绍了[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> : MonoBehaviour
        where T: SingleMono<T>
    {
        protected static T instance;
        // 创建一个GameObject,也是单例的
        private static GameObject go;

        public static T Instance
        {
            get
            {
                // 在创建时也会检查go
                if (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>我也难以理解是什么意思,有知道的朋友请答疑解惑,不胜感激。文章来源地址https://www.toymoban.com/news/detail-428683.html

到了这里,关于[Unity] No.1 Single单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity单例模式较为简单的理解

    本文将介绍unity中单例模式从最简单到复杂的实际使用。 单例模式是一种设计模式。 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软

    2023年04月11日
    浏览(26)
  • [Unity] 单例设计模式, 可供继承的单例组件模板类

    一个可供继承的单例组件模板类: 因为 Unity 是单线程的, 所以在这里没有必要使用双检索 例如你要创建一个全局的单例管理类, 可以这样使用: 尽量避免让 SingletonComponent 帮你创建组件, 因为它只是单纯的将组件创建, 并挂载到空对象上, 而不会进行任何其他行为. 如果你的组件

    2024年02月08日
    浏览(32)
  • Unity的三种单例模式(饿汉,懒汉,MonoBehaviour)

    单例的使用场景 ​ 对象全局唯一,且经常被使用。 static静态字段介绍 所有对象共享static属性,即static属性在此类中是唯一的。 static属性不会被GC回收,随着程序开始而创建,随着程序结束而销毁(so 不要滥用单例哦) 学过面向对象的小伙伴对static想必都不陌生,其具有的特质

    2023年04月15日
    浏览(34)
  • Java基础:单例模式,Spring源码中有哪些单例模式

    单例模式是一种常用的软件设计模式,其目的是确保一个类仅有一个实例,并提供一个全局访问点来获取这个唯一实例。在Java中,实现单例模式通常需要遵循以下几个关键原则: 私有化构造器 :将类的构造器声明为 private ,以防止外部代码通过 new 操作符直接创建该类的实

    2024年04月23日
    浏览(29)
  • 【C++基础】单例模式

    本文章参考:单例模式 - 巴基速递 | 爱编程的大丙 什么是单例模式 在一个项目中,全局范围内,某个类的实例有且仅有一个,通过这个唯一实例向其他模块提供数据的全局访问,这种模式就叫单例模式。单例模式的典型应用就是任务队列。 如果使用单例模式,首先要保证这

    2024年02月07日
    浏览(24)
  • 【unity之IMGUI实践】单例模式管理数据存储【二】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.首先将音乐数据封装在类中,不采用单例模式 2. 而后封装一个游戏数据类为单例模式:功能

    2024年02月16日
    浏览(32)
  • 【unity之IMGUI实践】单例模式管理面板对象【一】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ API:简单的旋转 解析: 1.采用单例模式,原因: 单例模式无法被纂改基类,适合当管理者 2.基类提取了子类所有的共

    2024年02月15日
    浏览(37)
  • java基础之设计模式(单例模式,工厂模式)

    是一种编码套路 单例模式 一个类只能创建一个实例 饿汉式 直接创建唯一实例 缺点: 有可能浪费空间 懒汉式 在获取实例是创建唯一对象 缺点: 线程效率慢 懒汉式-进阶版 在懒汉式的基础上,利用同步代码块结合二次校验提高执行效率 工厂模式 是一种底层技术,通常用于底层框

    2024年01月18日
    浏览(33)
  • 【Unity3D日常开发】Unity3D中实现单例模式详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,说一下,什么是 单例模式(Singleton) 。 单例模式是设计模式中常见的一种设计模式,目的是为了

    2024年02月02日
    浏览(48)
  • Java多线程基础-8:单例模式及其线程安全问题

    单例模式是经典的设计模式之一。什么是设计模式?代码的设计模式类似于棋谱,棋谱就是一些下棋的固定套路,是前人总结出来的一些固定的打法。依照棋谱来下棋,不说能下得非常好,但至少是有迹可循,不会下得很糟糕。代码的设计模式也是一样。 设计模式,就是软件

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包