首页 > 其他分享 >实现单例模式

实现单例模式

时间:2024-09-22 12:22:35浏览次数:9  
标签:实现 子类 模式 对象 单例 Test 父类 构造函数

对于一些管理的类,且只需要创建一次对象的类我们可以把它设置为单例模式

一、c#和unity中不继承MonoBehaviour如何实现单例模式:

1.在类中创建改类的静态私有对象并且初始化堆区空间

2.提供给外部一个静态的公共属性来获得改静态私有对象(只可以得不允许外部改,防止外部置空)

3.写一个私有的无参数的构造函数,顶掉公共的默认构造函数,这样外部不可以实例化对象了,就只可以通过公共的成员属性来得到唯一的类对象,

  class Test
    {
        private static Test t = new Test();
        public static Test T
        {
            get
            {
                return t;
            }
        }
        private Test()
        {

        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //Test t = new Test();//顶掉了默认构造函数,也没有提供公共的构造函数,所以外部无法实例化对象
          
        }
    }

二、unity中继承MonoBehaviour的类怎么在父类中实现子类单例模式

//根据里氏替换原则,父类可以在的位置子类也可以在,即父类可以装载子类

1.所以泛型来创建子类的静态私有对象,但是继承了MonoBehaviour不用new来创建空间

2.提供给外部一个静态的公共属性来获得改静态私有对象(只可以得不允许外部改,防止外部置空)

3.由于继承了MonoBehaviour的类进入挂载了改脚本的对象的声明周期中所以在Awake中直接让私有的静态对象=当前对象并且通过as转为泛型,并且加上泛型约束,因为要使用as,保证是引用类型 where 泛型符号:class

public class singleinstance<T> : MonoBehaviour where T:class
{
    private static T instance;
    public static T Intance => instance;//简略写法省略了{}和return

    private void Awake()
    {
        instance = this as T;
    }
}

//4.子类继承该父类指定T为子类类型即可实现继承的子类的单例模式。(因为Awake其实相当于是父类的构造函数,在子类调用前先会调用父类的Awake方法,简单理解),后期通过子类类名.Intance可以访问到子类中的公共成员。

标签:实现,子类,模式,对象,单例,Test,父类,构造函数
From: https://blog.csdn.net/2401_84691335/article/details/142434406

相关文章

  • 链动3+1滑落模式小程序开发
    链动3+1滑落模式是一种在电商、微商或社交电商领域常用的营销模式,通过用户推荐新用户形成团队结构,并依据团队的发展给予相应的奖励或优惠。在小程序平台上开发链动3+1滑落模式,需要考虑到用户体验、数据安全、奖励机制的实现等多个方面。以下是一些基本的开发步骤和考虑因素:1.......
  • LL学设计模式之最终章
    序学习过好多遍设计模式。感觉还是没学会。面试啥的又说不出来。这是最后一次了。忘了并不代表不会。知道个大概就行了为啥要学设计模式:1:阅读源代码的时候,知道是啥设计模式,就更容易看懂。2:为了写出好的容易扩展的代码。应对各种变化。简单。设计模式有指导原则。设计模式......
  • STM32流水灯程序代码及解析:三种实现方式
    STM32流水灯程序代码及解析:三种实现方式在这篇文章中,我们将介绍三种方式来实现STM32的流水灯程序,包括使用HAL库、标准库和直接操作寄存器的方法。通过这三种不同的方式。1.硬件准备STM32开发板(如STM32F4或STM32F1系列)若干LED灯(通常是4个)适当的电阻连接线2.接线图将L......
  • QT 3D动画与效果实现
    QT3D动画与效果实现使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看......
  • FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播
    ​之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMPStreamer实现完整的RTMP直播流程,另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRTStreamer实现完整的SRT直播流程,接下来介绍如何使用EasyPusher-Android实现完整的RTSP直播流程。一、......
  • 基于springboot图书管理系统设计与实现-毕业设计源码25325
    基于springboot图书管理系统设计与实现摘 要本研究旨在探讨图书管理系统的设计与实现,通过开发一个基于SpringBoot的图书管理系统,实现了用户和管理员的交互操作和系统管理功能。系统分为用户和管理员两部分,用户可以浏览图书信息、进行借阅和归还操作,管理员负责系统的管理和......
  • 01背包问题之背包容量为什么要倒序遍历?(以C++代码具体实现为例)
    首先是先阐述一下背包问题:有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用依次,求解将哪些物品装入背包里物品价值总和最大。这里不解释代码的其他部分,只对代码中的背包容量遍历进行具体的解释,首先给出遍历部分的代......
  • 基于python+django的电影推荐系统设计与实现大数据分析系统
    前言......
  • 助农扶贫微信小程序的设计与实现
    文章目录前言......
  • 基于微信小程序的远程在线诊疗系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序基于移动平台的远程在线诊疗系统的开发全过程。通过分析微信小程序基于移动平台的远程在线诊疗系统管理的不足,创建了一个计算机管理微信小程序基于移动平台的远程在线......