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

这篇具有很好参考价值的文章主要介绍了享元模式 Flyweight Pattern 《游戏编程模式》学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果我们要存储一个树一样的数据结构,直觉来说我们会这么写
享元模式 Flyweight Pattern 《游戏编程模式》学习笔记,享元模式,游戏,学习

但是实际上我们会发现,哪怕森林里有千千万万的树,它们大多数长得一模一样。 它们使用了相同的网格和纹理。 这意味着这些树的实例的大部分字段是一样的。
享元模式 Flyweight Pattern 《游戏编程模式》学习笔记,享元模式,游戏,学习

那么我们就可以将树共有的数据拿出来分离到另一个类中:
享元模式 Flyweight Pattern 《游戏编程模式》学习笔记,享元模式,游戏,学习

我们只需要一个TreeModel实例化的对象就好了,剩下的树只需要保存一个TreeModel的指针,就可以很快的找到这个对象
享元模式 Flyweight Pattern 《游戏编程模式》学习笔记,享元模式,游戏,学习

类似于这样
享元模式 Flyweight Pattern 《游戏编程模式》学习笔记,享元模式,游戏,学习

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

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

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

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

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

原文链接:
享元模式 · Design Patterns Revisited · 游戏设计模式 (tkchu.me)文章来源地址https://www.toymoban.com/news/detail-635200.html

到了这里,关于享元模式 Flyweight Pattern 《游戏编程模式》学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【设计模式——学习笔记】23种设计模式——享元模式Flyweight(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    【设计模式——学习笔记】23种设计模式——享元模式Flyweight(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    你的公司主要做一些小型的外包项目,之前给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求有些不同 有客户要求以新闻的形式发布 有客户要求以博客的形式发布 有客户要求以微信公众号的形式发布 【 传统方式】 直接复制

    2024年02月15日
    浏览(17)
  • 《游戏编程模式》学习笔记(六)单例模式 Singleton Pattern

    保证一个类只有一个实例,并且提供了访问该实例的全局访问点。 定义这种东西一般都是不说人话的,要想要理解这句话的意思,我们得把它揉开了才能搞明白。 我们先看前半句 “保证一个类只有一个实例”,单例一般使用类来实现,也就是说,这个单例类,其有且只能有

    2024年02月12日
    浏览(9)
  • 设计模式-享元模式(Flyweight)

    享元模式(Flyweight Pattern)是一种结构型设计模式,它的主要目标是减少应用程序中对象的数量,以节省内存和提高性能。这一模式适用于对象数量庞大且相似的情况,通过共享内部状态来减少对象的创建。 在本篇博客中,我们将详细介绍享元模式的概念,并提供一个简单的

    2024年02月09日
    浏览(12)
  • 【设计模式-08】Flyweight享元模式

    【设计模式-08】Flyweight享元模式

    简要的理解:享元模式就是新建一个池(Pool),该池子(Pool)中有新建好的一堆对象,当需要使用时,从池子(Pool)中直接获取,不用重新新建一个对象。通俗的讲就是: 共享元数据 。 比如Java中的String就是使用享元模式,String的值存储在一个内存池中,不用每次分配一个内存存储

    2024年01月21日
    浏览(27)
  • 命令模式 Command Pattern 《游戏设计模式》学习笔记

    命令模式 Command Pattern 《游戏设计模式》学习笔记

    对于一般的按键输入,我们通常这么做,直接if按了什么键,就执行相应的操作 在这里我们是将用户的输入和程序行为硬编码在一起,这是我们很自然就想到的最快的做法。 但是如果这是一个大型游戏,往往我们需要实现一个按键配置的功能(话说2077直到上线都没有实现这

    2024年02月14日
    浏览(12)
  • 设计模式——1_5 享元(Flyweight)

    设计模式——1_5 享元(Flyweight)

    今人不见古时月,今月曾经照古人 ——李白 运用共享技术有效地支持大量颗粒度对象 享元 真是一个非常非常优秀的翻译 如果你单看 四人组 对享元的定义,那很容易就会把他理解成类似 连接池 那种对对象进行共享的模式。但是如果享元就是对对象池的管理的话,那他的元

    2024年01月22日
    浏览(11)
  • 《游戏编程模式》学习笔记(十二)子类沙箱 Subclass Sandbox

    基类定义抽象的沙箱方法和几个提供的操作。 将操作标为protected,表明它们只为子类所使用。 每个推导出的沙箱子类用提供的操作实现了沙箱函数。 假设我们在做一个超级英雄的游戏,我们现在要实现一些超能力。我们计划创建一个Superpower基类。然后由它派生出各种超级能

    2024年02月09日
    浏览(8)
  • Flyweight Pattern —— Creational Class

    享元模式在主流的标准里是放到结构大类下的,但是我感觉这个模式的最终作用也是为了获取一个类,所以我将其划分到创建大类下。 Flyweight 是指轻量级的。 享元模式旨在支持大量细粒度的对象共享,以减少内存消耗。该模式通过共享相似对象的部分状态,来减少对象的数

    2024年02月10日
    浏览(9)
  • 《游戏编程模式》--优化模式--学习

     在线阅读: 优化模式 · 游戏设计模式 参考文章:  GameDesignPattern_U3D_Version/Assets/010OptimizationPatterns at master · TYJia/GameDesignPattern_U3D_Version · GitHub 数据局部性介绍了计算机的存储层次以及如何使用其以获得优势。 脏标识帮你避开不必要的计算。 对象池帮你避开不必要的内存

    2024年02月05日
    浏览(10)
  • 《设计模式的艺术》笔记 - 享元模式

            享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,是一种对象结构型模式。 myclass.

    2024年01月19日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包