享元模式 Flyweight Pattern 《游戏编程模式》学习笔记

news/2024/11/23 17:17:40/

如果我们要存储一个树一样的数据结构,直觉来说我们会这么写
在这里插入图片描述

但是实际上我们会发现,哪怕森林里有千千万万的树,它们大多数长得一模一样。 它们使用了相同的网格和纹理。 这意味着这些树的实例的大部分字段是一样的。
在这里插入图片描述

那么我们就可以将树共有的数据拿出来分离到另一个类中:
在这里插入图片描述

我们只需要一个TreeModel实例化的对象就好了,剩下的树只需要保存一个TreeModel的指针,就可以很快的找到这个对象
在这里插入图片描述

类似于这样
在这里插入图片描述

为了减少需要推送到GPU的数据量,我们想把共享的数据——TreeModel——只发送一次。 然后,我们分别发送每个树独特的数据——位置,颜色,大小。 最后,我们告诉GPU,“使用同一模型渲染每个实例”。

在这些API中,你需要提供两部分数据流。 第一部分是一块需要渲染多次的共同数据——在例子中是树的网格和纹理。 第二部分是实例的列表以及绘制第一部分时需要使用的参数。 然后调用一次渲染,绘制整个森林。

这就是享元模式,实际上我认为享元模式没有什么好说的东西,所以这里的大部分内容我都是直接照搬原著的。

享元模式的使用场合
当系统中某个对象类型的实例较多的时候。
由于使用了大量的对象,造成了很大的存储开销。
在系统设计中,对象实例进行分类后,发现真正有区别的分类很少的时候。

如果享元模式与对象池联动,可以进一步减少内存的开销

原文链接:
享元模式 · Design Patterns Revisited · 游戏设计模式 (tkchu.me)


http://www.ppmy.cn/news/1006036.html

相关文章

KepwareEX配置API REST接口

服务端Kepware设置 API允许连接设置 创建通道 请求地址(POST)&#xff1a; https://<主机名_或_ip>:<端口>/config/v1/project/channels 以下示例使用postman工具访问API创建了一个名为Channel1 的通道&#xff0c;其使用在本地主机运行的服务器中的Simulator …

前端面试的游览器部分(4)每篇10题

31.什么是DOM&#xff08;文档对象模型&#xff09;&#xff1f;什么是DOM树&#xff1f;如何访问和操作DOM元素&#xff1f; DOM&#xff08;文档对象模型&#xff09;是一种编程接口&#xff0c;它将HTML或XML文档表示为树形结构&#xff0c;允许开发者通过脚本语言&#xf…

SQLServer从入门到高级(知识点)

SQLServer从入门到高级(知识点) 文章目录 SQLServer从入门到高级(知识点)SQLServer最大限制提高sql查询效率的方法取值范围删除重复行随机抽取50条数据1 sql语句执行顺序2 基本类型3 聚合函数4 日期函数4.1 取出日期4.2 日期的加减4.3 计算日期间隔4.4 计算某一天有多少条记录(…

Flink之RedisSink

在Flink开发中经常会有将数据写入到redis的需求,但是Flink官方并没有对应的扩展包,这个时候需要我们自己编译对应的jar资源,这个时候就用到了bahir,barhir是apahce的开源项目,是专门给spark和flink提供扩展包使用的,bahir官网,这篇文章就介绍下如何自己编译RedisSink扩展包. 下…

uni-app——下拉框多选

一、组件components/my-selectCheckbox.vue <template><view class"uni-stat__select"><span v-if"label" class"uni-label-text">{{label &#xff1a;}}</span><view class"uni-stat-box" :class"…

XSS漏洞简单测试

1、如何防御 在springboot中可以使用拦截器进行输入框转换 2、XSS漏洞简单测试 网站&#xff1a;xss注册一下 注册账号&#xff0c;创建项目 选择对应的 点击下一步 在指定的地方输入即可 xxxxx文本 <script srchttp://xsscom.com//YdIbhc></script> 在我的项…

MySQL学习记录:第五章 视图

文章目录 第五章 视图一、创建视图二、视图的修改三、删除视图四、查看视图结构五、视图的更新1、插入2、修改3、删除第五章 视图 /* 含义:虚拟表,和普通表一样使用 mysql5.1版本开始提供视图功能,是通过表动态生成的数据是一种虚拟存在的表,行和列的数据来自定义视图的查…

github国内镜像站点。解决assets转圈加载不出来的问题

github镜像站 https://hub.nuaa.cf/ https://gitclone.com/ 下载加速 https://gh.api.99988866.xyz/ https://ghproxy.com/ https://github.ur1.fun/ assets转圈加载不出来 f12打开开发者工具&#xff0c;根据前面的loadinglaze&#xff0c;找到这个网址 可以直接看到assets…