【UE4 设计模式】单例模式 Singleton Pattern
概述
描述
- 保证一个类只有一个实例
- 提供一个访问该实例的全局节点,可以视为一个全局变量
- 仅在首次请求单例对象时对其进行初始化。
套路
- 将默认构造函数设为私有, 防止其他对象使用单例类的
new运算符。 - 新建一个静态构建方法作为构造函数。
使用场景
- 资源Manager,如 SoundManager、ParticeManager 等
- 线程池
- 多线程的单例模式,线程锁与双重检测
优缺点
- 优点
- 提供了对唯一实例的受控访问;
- 由于内存只存在一个对象,因此可节约资源
- 单例模式可以允许可变的数目的实例,使用单利模式进行扩展,使用控制单利对象相似的方法获取指定个数的实例,及解决了单利对象,共享过多,而有损性能的问题;
- 缺点
- 由于单例模式不是抽象的,所以可扩展性比较差;
- 单例职责过重,在一定程度上违背了单一职责。(耦合性高)
UE4中的单例
GameInstance
- 继承 GameInstance 创建类
- Project Settings->Project->Game Instance -> Game Instance Class 设置为自定义类
Subsystem
- 包括五类:
- UEngineSubsystem
- UEditorSubsystem
- UGameInstanceSubsystem
- UWorldSubsystem
- ULocalPlayerSubsystem
自定义 Singleton Class
继承 UObject 自定义
代码
UCLASS(BlueprintType,Blueprintable)
class DESIGNPATTERNS_API USingletonObject : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
static USingletonObject* GetSingletonObjectIns(); UFUNCTION(BlueprintCallable)
void SetValue(int32 NewValue); UFUNCTION(BlueprintCallable)
int32 GetValue(); private:
static USingletonObject* SingletonObject; int32 IntValue;
};
USingletonObject* USingletonObject::SingletonObject = nullptr; USingletonObject* USingletonObject::GetSingletonObjectIns()
{
if (SingletonObject == nullptr)
{
SingletonObject = NewObject<USingletonObject>();
}
return SingletonObject;
} void USingletonObject::SetValue(int32 NewValue)
{
IntValue = NewValue;
} int32 USingletonObject::GetValue()
{
UE_LOG(LogTemp, Warning, TEXT(__FUNCTION__" Value = %d"), IntValue);
return IntValue;
}
Game Singleton Class 指定
继承 UObject 创建单例类
Project Settings->Engine->General settings->Game Singleton Class 设置为自定义的单例类。会自动生成与销毁
单例类代码,修改
USingletonObject* USingletonObject::GetSingletonObjectIns()
{
if (SingletonObject == nullptr) // 也可以判断 GEngine
{
SingletonObject = Cast<USingletonObject>(GEngine->GameSingleton);
}
return SingletonObject;
}
参考
【UE4 设计模式】单例模式 Singleton Pattern的更多相关文章
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
- 设计模式之单例模式(Singleton Pattern)
单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ...
- 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
原文:乐在其中设计模式(C#) - 单例模式(Singleton Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 单例模式(Singleton Pattern) 作者:weba ...
- 设计模式系列之单例模式(Singleton Pattern)——确保对象的唯一性
模式概述 模式定义 模式结构图 饿汉式单例与懒汉式单例 饿汉式单例 懒汉式单例 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 适用场景 说明:设计模式系列文章是读刘伟所著 ...
- 【设计模式】单例模式 Singleton Pattern
通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance) 的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...
- 二十四种设计模式:单例模式(Singleton Pattern)
单例模式(Singleton Pattern) 介绍保证一个类仅有一个实例,并提供一个访问它的全局访问点. 示例保证一个类仅有一个实例. Singleton using System; using S ...
- 抽象工厂(Abstract Factory),工厂方法(Factory Method),单例模式(Singleton Pattern)
在谈工厂之前,先阐述一个观点:那就是在实际程序设计中,为了设计灵活的多态代码,代码中尽量不使用new去实例化一个对象,那么不使用new去实例化对象,剩下可用的方法就可以选择使用工厂方法,原型复制等去实 ...
- 十次艳遇单例设计模式(Singleton Pattern)
1.引言 单例设计模式(Singleton Pattern)是最简单且常见的设计模式之一,在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访 ...
- 设计模式 单例模式(Singleton) [ 转载2 ]
设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类 ...
- 设计模式 单例模式(Singleton) [ 转载 ]
设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...
随机推荐
- Docker数据映射
1.映射目录 docker run -v 2.映射文件 docker run -v
- Linux串口调试详解
测试平台 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL 目标机内核:Linux 4.1.15 目标机添加串口设备 一般嵌入式主板的默认镜像可能只配置了调试串口,并用于 consol ...
- Intel® QAT加速卡之Ring & Ring Bank
1. QAT的应用模式 Intel 通讯系列芯片对于每种受支持的加速服务(加密,数据压缩),都支持以下应用模式: 内核模式,其中应用程序和加速服务都在内核中运行空间. 用户空间直接访问在用户空间中运行 ...
- mysql远程连接以及错误解决&命令行基本操作
现在大家的程序服务基本都是部署在云服务器上,今天我分享记录一下:使用mysql数据库过程中比较常见操作和遇到的问题 环境:lunix 系统(阿里云服务器,华为云服务器,腾讯云等均适用) + mysql ...
- EF架构封装类
http://www.woxihuan.com/46528208/1323334777088641.shtml http://www.ediclot.com/archives/2368 http:// ...
- 第十一章 Net 5.0 快速开发框架 YC.Boilerplate --图数据库模块Neo4j
在线文档:http://doc.yc-l.com/#/README 在线演示地址:http://yc.yc-l.com/#/login 源码github:https://github.com/linb ...
- 安卓使用讯飞sdk报错
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.iflytek.cloud.SpeechSy ...
- PTA 面向对象程序设计 7-1 2017Final 圆周率山
7-1 2017Final 圆周率山 为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率. 已知圆周率为:3. 1415926535 8979323846 2643383 ...
- scrum项目冲刺_day02总结
摘要:今日完成任务. 1.appUI页面完成 2.图像识别正在进行 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能 2.语音识别功能 3.垃圾搜索功能 4.相关新闻爬取 三. ...
- Django学习day15BBS项目开发2.0
每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...