问题标签 [flyweight-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7028 浏览

java - 享元模式中描述的内在和外在状态有什么区别?

从“四人组中的模式”一章中,FlyWeight大多数对象状态可以被设为外部时,FlyWeight 模式适用。

是什么extrinsic state意思?我觉得这种模式是用来共享对象的。如果要共享对象,那么该对象怎么可能有任何状态呢?

0 投票
2 回答
1275 浏览

design-patterns - 享元模式与静态字段

据我了解,享元模式的目的是通过共享通用的外部状态来减少内存占用并提高性能。为什么有人更愿意实现模式而不是将共享状态存储在静态字段中?

考虑以下示例:http ://www.oodesign.com/flyweight-pattern-wargame-example-java-sourcecode.html

在此处输入图像描述

如果我是对的,那么此示例中的重点是通过持有对单个 SoldierImp 对象的引用,在 SoldierClient 类的所有实例之间共享公共状态(soldierGraphicalRepresentation 对象)。

为什么我会为实现这个设计而烦恼?我很想按如下方式声明 SoldierClient 类:

通过这种方式,SoilderClient 的所有实例共享对同一个 solderGraphicalRepresentation 对象的引用,从而实现了相同的目标。我错了吗?

0 投票
1 回答
242 浏览

serialization - 序列化是否允许享元设计模式?

我正在使用一个复杂的对象设计,我使用享元模式来限制类的多个实例之间的某些非静态变量。如果两个对象(享元信息和包含它的类)都是可序列化的,并且这些卡的列表从 wcf 服务传输到客户端,则客户端是否维护模式(即多个实例的享元信息只有一个副本高级别的)?我将在下面给出一个小代码示例,以防我不能很好地解释自己。

其中一个列表包含 50 多个 SmallObject,但使用享元模式仅为每种单独类型的对象创建足够的图像。它不能是静态变量,因为由于设计限制,有不同类型的 SmallObjects 不能用子类表示。我需要知道的是客户是否收到 50 多个离散的享元对象,或者保持模式并且他只收到每种类型的 1 个享元。

0 投票
1 回答
303 浏览

java - 策略模式重用数据创建报告

我正在实现一个将使用不同组件的报告,即有些组件具有页眉、页脚表。另一个有标题、标题、表格、图表。我使用与策略模式类似的模式实现了这一点。我可以使用相同的类报告生成报告,并定义一个接口组件(onDraw)。每个组件都实现了 Table、Graph 等...

但是对于内存消耗和良好的软件设计,如果在每个具有相同数据的报告上使用它们,我不想创建重复的表和标题。是否有一种模式可用于将绘制的表格和标题从一个报告中保存下来并重新用于另一个报告?我一直在研究飞重模式。或者在课堂报告中使用静态变量。问题是当我想在报告类上使用不同的数据时。

0 投票
1 回答
2055 浏览

java - 设计一个文字处理器

我遇到了一个面试问题,要求设计一个文字处理器。

经过研究,我发现享元设计模式是一种方法。我想出了下面的代码(忽略语法)。但是我很难思考什么是我的关键,什么是我对文字处理器的价值。public class Format { public readonly string _fontname; 公共只读字符串_weight;公共只读 int _size;

上面的课程会是什么样子?如何通过实际处理单词来完成程序?

0 投票
3 回答
411 浏览

java - 使用享元设计的 XML DOM 解析

对于包含大量重复节点、属性或值的文档,使用 DOM 在 Java 中处理 XML 文档可能会占用过多的内存。

有谁知道一个 Java XML DOM API,它在内部利用 flyweight-pattern 将内存占用保持在最低限度?甚至可以配置/启用/禁用?

0 投票
2 回答
1431 浏览

c# - C# 用不同的“处理器”处理相同的对象是一种享元模式?

我一直在对不同的设计模式进行大量研究,并试图确定正确的方法。

我有一个正在开发的图像上传 MVC 应用程序,它需要以几种不同的方式处理图像,例如创建缩略图并保存数据库记录。解决这个问题的最佳方法是通过享元模式吗?以此为例:

我对这个问题也有第二部分。如果处理器有较小的相关“子处理器”怎么办?我脑海中的一个例子是书籍生成器。

这也是蝇量级模式吗?我将如何处理那棵树的遍历?

编辑

我在下面问了这个问题,但我想在这里添加它:

我看到的所有关于复合模式的示例似乎都与值的处理有关,而享元模式似乎与对象状态的处理(或共享)有关。我只是读了太多的例子吗?将模式结合起来是解决方案吗?

0 投票
1 回答
338 浏览

design-patterns - 在享元设计模式中如何选择内在状态和外在状态?

让我们以这个问题为例,因为我厌倦了理解刻板印象的例子。

一家报业公司正计划开发一个新的软件系统,用于管理其记者撰写的不同新闻文章和来自不同新闻机构的新闻来源。

不同的文章以不同的格式和排列呈现给读者。该公司的在线新闻网站在其主页上显示最新的新闻文章。这里显示了新闻文章的串珠和摘要。该站点的 RSS 提要以 XML 格式显示主要新闻文章的标题和简要摘要。两种情况下的用户都可以单击标题以查看完整的文章。

报纸的数字版包含根据传统报纸格式的完整文章。

一名初级软件工程师目前正在为这家报业公司设计新的软件系统。他设计了一个类来表示一篇新闻文章。此类的每个对象将代表一篇新闻文章,即其标题、作者、类别、简要描述、全文等。

在所有三种场景(在线报纸、RSS 提要、数字报纸)中,新闻文章类的对象都将用于显示内容。

现在按照我的看法,

外在 - 标题,作者

内在 - 类别

这个对吗?或者有没有办法有效地识别这些状态?

0 投票
2 回答
77 浏览

java - 什么对创建对象的时间影响最大​​?

我知道创建一个对象需要时间,这就是享元模式存在的原因。我想知道的是什么增加了创建单个对象的时间最多?

我认为这可能是在内存中搜索稍大的空间,但我猜它只比对象所具有的每个字段稍大。那么,当我们在寻找特定字段的值时,可能是到内存中正确地址的旅行,但话又说回来:我们唯一添加的就是寻找对象的地址。

0 投票
1 回答
138 浏览

java - 具有二维数组的享元模式

我有一个 Objects Bee 的矩阵(二维数组),我想应用享元模式,我应该如何应用它?如果我直接用一个巨大的大小实例化矩阵,我会分配太多的内存。有没有一种有效的方法来应用模式?

我已经检查过该模式是否适用于 Bee 对象,但我担心矩阵内存。PD我正在使用java。