蝇量模式

在这篇文章中,我将描述“轻量级”结构模式。或“机会主义者” (蝇量级)
该模式属于结构模式组。

让我们看一下下面该模式如何工作的示例:


为什么需要它? 节省内存。我同意,在Java广泛使用的时代(白白消耗cpu和内存),这不再那么重要,但值得使用。
上面的例子中只输出了 40 个对象,但是如果将数量增加到 120,000,内存消耗也会相应增加。
让我们看看 Chromium 浏览器中不使用享元模式的内存消耗情况:

如果不使用模式,内存消耗约为 300 MB。

现在让我们向应用程序添加一个模式并查看内存消耗:

使用该模式,内存消耗约为 200 MB,因此我们在测试应用程序中节省了 100 MB 内存;在严肃的项目中,差异可能会更大。

它是如何工作的?

在上面的例子中,我们画了 40 只猫,或者为了清楚起见,画了 12 万只猫。每只猫都作为 png 图像加载到内存中,然后在大多数渲染中将其转换为用于渲染的位图(实际上是 bmp),这样做是为了速度,因为压缩的 png 需要很长时间来渲染。不使用该模式时,我们将 12 万张猫的图片加载到 RAM 中并进行绘制,但是当使用“轻量级”模式时,我们会加载 12 万张猫的图片。我们将一只猫加载到内存中,并以不同的位置和透明度将其绘制 12 万次。整个神奇之处在于,我们在渲染时将坐标和透明度与猫图像分开实现,渲染只需要一只猫并使用具有坐标和透明度的对象来正确渲染。

代码是什么样的?

以下是语言 Rise 的示例 >< /p>

不使用模式:


猫图像是为循环中的每个对象单独加载的–猫图像。

使用模式:

一张猫的图片被 12 万个物体使用。

用在什么地方?

用于 GUI 框架,例如 Apple 的“重用”; (重用)UITableViewCell 表格单元格,这为不了解此模式的初学者增加了入门障碍。也常用于游戏开发。

源代码

https://gitlab.com/demensdeum/patterns/< /p>

来源

https://refactoring.guru/ru/design-patterns/蝇量级
http://gameprogrammingpatterns.com/flyweight.html

Leave a Comment

Your email address will not be published. Required fields are marked *