news 2026/5/6 13:01:15

设计模式--享元模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
设计模式--享元模式

享元模式

建议阅读:https://gpp.tkchu.me/flyweight.html

定义

在我们打游戏时,有没有想过为什么这么多的人物或者景色能被这么快的渲染出来,而没有丝毫卡顿(当然GPU性能要好0.0)。

比如说,求生之路的大量丧尸以及其周围的景色(譬如树木)。
这是非常大的数据量,多边形网格和纹理数据非常大。描述整个场景的对象在一帧的时间内就交给GPU实现是太过了。

因此,有没有什么比较好的处理办法?有的,游戏中通常用享元模式来处理这种场景。

其关键在于,大量的人物/树木大多是长得一模一样,他们使用了相同的网络和纹理。这就意味着这些人物/树木的实例的大部分字段是一样的。

因此,我们可以将其共有部分拿出,分离到一个新类中。例如,游戏中的每个树的实例只需有一个对这个共享数据的引用,留下来的是那些实例相关的数据:

// share class TreeModel { private: Mesh mesh_; Texture bark_; Texture leaves_; }
// private class Tree { private: TreeModel* model; Vector position_; double height_; double thickness_; }

可见,享元模式通过将对象的数据分成两种来解决这种问题。
第一种数据作为共享数据,可被每棵树的实例所应用。Gof称之为固有状态(不会变化的状态)。
第二种数据作为私有数据,为不同树的实例所持有,例如位置、颜色等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 14:26:57

数据库笔记

SQL数据库所有数据有相同的字段名(键),可以像表格那样存。字段名作为每一列的头。但是很明显不适合存字段为数组、列表、字典的数据。NoSQL数据库不像表格那样存的数据库。每个数据条目的成员不固定。事务把一系列操作按顺序写成一个脚本&…

作者头像 李华
网站建设 2026/4/27 23:42:02

UVM-phase中的object机制

在class uvm_phase extends uvm_object中1. 类的作用和结构这个类是 uvm_phase,它管理测试平台中阶段的 objection 机制。UVM 使用 objection 机制来控制仿真的执行时间,防止测试提前结束。核心成员:systemveriloguvm_objection phase_done; …

作者头像 李华
网站建设 2026/5/2 16:41:43

FeignRequestInterceptor 原理详解

FeignRequestInterceptor是 OpenFeign 的请求拦截器机制,其工作原理如下:1. 核心设计模式责任链模式:Feign 通过拦截器链在请求发送前和接收后执行自定义逻辑。// 拦截器接口定义 public interface RequestInterceptor {void apply(RequestTe…

作者头像 李华
网站建设 2026/5/2 13:20:57

AI 写论文哪个软件最好?虎贲等考 AI 凭 “学术闭环” 登顶首选

毕业季的论文攻坚战,“AI 写论文哪个软件最好” 成了学子圈的终极拷问。有的软件文献引用虚拟无据,有的 AI 痕迹明显被导师打回,有的功能碎片化需反复切换工具 —— 真正靠谱的 AI 写作软件,不仅要 “写得快”,更要 “…

作者头像 李华
网站建设 2026/5/3 6:36:57

网络安全技术核心框架:一文理清从原理到实践的知识体系

1.网络安全的概念 网络安全的定义 ISO对网络安全的定义:网络系统的软件、硬件以及系统中存储和传输的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改、泄露,网络系统连续可靠正常地运行,网络服务不中断。 网络安全的属…

作者头像 李华
网站建设 2026/5/3 0:53:45

Aurix TC387 Can配置记录

一、MCMCAN介绍fSYN is supplied from fMCANH and fASYN is supplied from fMCAN from CCU. fSYN is used as the clock source for Register and RAM interface,fASYN is used to generate the nominal and fast CAN FD baudrates. It is recommended to use fASYN as 80, 40,…

作者头像 李华