码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • UE4 设计模式:单例模式(Singleton Pattern)


    目录

    描述

    套路

    使用场景

    优缺点

    UE4中的单例模式

    GameInstance

    SubSystem

    自定义Singleton Class

    Game Singleton Class指定


    描述

    • 保证一个类只有一个实例
    • 提供一个访问该实例的全局节点,可以视为一个全局变量
    • 仅在首次请求单例对象时对其进行初始化

    套路

    • 将默认构造函数设为私有,防止其他对象使用单例类的new运算符
    • 新建一个静态构建方法作为构造函数

    使用场景

    • 资源Manager,如SoundManager、ParticleManager
    • 线程池
    • 多线程的单例模式,线程锁与双重检测

    优缺点

    • 优点
      • 提供了对唯一实例的受控访问
      • 由于内存只存在一个对象,因此可节约资源
      • 单例模式可以允许可变的数目的实例,使用单例模式进行扩展,使用控制单例对象相似的方法获取指定个数的实例,解决单例对象共享过多从而有损性能的问题
    • 缺点
      • 由于单例模式不是抽象的,所以可扩展性比较差
      • 单例职责过重,在一定程度上违背了单一职责(耦合性高)

    UE4中的单例模式

    GameInstance

    • 继承GameInstance创建类
    • Project Settings->Project->Game Instance -> Game Instance Class 设置为自定义类

    SubSystem

    自定义Singleton Class

    1. UCLASS(BlueprintType,Blueprintable)
    2. class DESIGNPATTERNS_API USingletonObject:public UObject{
    3. GENERATED_BODY()
    4. public:
    5. UFUNCTION(BlueprintCallable)
    6. static USingletonObject* GetSinletonObjectIns();
    7. UFUNCTION(BlueprintCallable)
    8. void SetValue(int32 NewValue);
    9. UFUNCTION(BlueprintCallable)
    10. int32 GetValue();
    11. private:
    12. static USingletonObject* SingletonObject;
    13. int32 IntValue;
    14. };
    15. USingletonObject* USingletonObject::SingletonObject=nullptr;
    16. USingletonObject* USingletonObject::GetSinletonObjectIns(){
    17. if(SingletonObject==nullptr){
    18. SingletonObject=NewObject();
    19. }
    20. return SinletonObject;
    21. }
    22. void USingletonObject::SetValue(int32 NewValue)
    23. {
    24. IntValue = NewValue;
    25. }
    26. int32 USingletonObject::GetValue()
    27. {
    28. UE_LOG(LogTemp, Warning, TEXT(__FUNCTION__" Value = %d"), IntValue);
    29. return IntValue;
    30. }

    Game Singleton Class指定

    • 继承 UObject 创建单例类

    • Project Settings->Engine->General settings->Game Singleton Class 设置为自定义的单例类。会自动生成与销毁

    • 把它当成全局常量来用,不建议运行中修改其中的变量数据

    单例类代码,修改

    1. USingletonObject* USingletonObject::GetSingletonObjectIns()
    2. {
    3. if (SingletonObject == nullptr) // 也可以判断 GEngine
    4. {
    5. SingletonObject = Cast(GEngine->GameSingleton);
    6. }
    7. return SingletonObject;
    8. }

     UE4 C++ 笔记(二):基础知识_老闫在努力的博客-CSDN博客_ue4

  • 相关阅读:
    OpenSSH
    mongoose搭建mqtt客户端
    【vue】使用less报错:显示this.getOptions is not a function
    SpringBoot启动后出现Please sign in页面
    基础测试干了4年,自学了自动化(太片面),突然接到被裁员消息
    OceanBase 4.0 - 从分布式到单机,从单机到分布式
    PostgreSQL、KingBase 数据库 ORDER BY LIMIT 查询缓慢案例
    刷题笔记之十一 (计算字符串的编辑距离+微信红包+年终奖+迷宫问题+星际密码+数根)
    全员全域安全守护,蔚来ET7获Euro NCAP五星安全评级背后的硬核实力
    2012年下半年 系统架构设计师 (案例分析)
  • 原文地址:https://blog.csdn.net/Jason6620/article/details/126531204
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号