问题标签 [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.
python - 将静态方法与享元装饰器一起使用时出错
我有一个制作精灵flyweight的类,我正在使用装饰器来调用这个类。这是一些代码:
在这个问题中,我将简化代码以显示相关内容。
但这给了我错误:
我应该改造我的轻量级实现还是有办法解决这个问题?
unity3d - 如何使用 FlyWeight 模式生成对象
所以我一直在设置这个测试来实现享元模式。我在这里创建了一个对象类和一个工厂,以基本上生成具有不同属性(在本例中为颜色、大小和形状)的相同类型的对象。所以我有每个属性的下拉菜单和一个创建对象的按钮。我想使用工厂类中的getobject函数来创建对象,但我似乎无法正确创建它。我得到了形状,但不是颜色或大小。它与我为函数设置的参数有关。我不想只做我现在正在做的事情来生成立方体和圆柱体。那只是一个测试。如果有人能想出解决这个问题的方法,我很感激谢谢。
项目等级
工厂类
java - 享元模式对象是不可变的?
我们知道,Java实习生字符串池是基于享元设计模式的。String 对象也是不可变的。是否强制所有使用享元模式的对象都是不可变的?. Flyweight模式中的可变对象和不可变对象有什么区别?
java - Java 实习生池实现创建了太多临时对象
我使用与字符串实习生相同的想法在 java 中创建了一个实习生池。简单地说,我维护一个
每次映射包含对象时,它都会返回相同的对象,好处是可以节省java堆内存。例如,我有一个这样的 Person 类:
它没有使类唯一的字段(无主键)。问题是当我想检查地图是否包含特定的人时,我需要先创建一个临时人员,以便 map.contains() 方法可以为这个人调用 equals() 方法。结果,在我运行profiler查看内存使用情况后,我可以看到GC收集了很多临时对象,这肯定会导致更多的GC和CPU使用。有没有一种方法可以在不创建太多临时对象的情况下实现实习生池的想法?
ps 我从这篇文章中得到了实习生池的想法:Generic InternPool<T> in Java?
swift - Swift 中的通用享元模式
我正在尝试在 Swift 中实现一个通用的享元模式。在我的代码中,我使用弱引用的弱引用字典。基本协议 ( Node
) 只是有一个位置。更改位置会创建一个新的Node
.
当不再有对给定享元的任何引用时,我在网上看到的实现不会尝试清理内容。
符合 的类Node
可以使用 选择加入flyweighting Factory
,它维护现有对象的字典。
- 当一个值被释放时,散列函数会改变(参见 参考资料
Weak<T>.hash(into:)
)。那会破坏事情吗? - 将这些值设为无主并以某种方式从工厂中移除会更好
deinit
吗?我可以以通用的方式做到这一点吗? - 身份运算符
===
不能用于协议类型。我可以在测试中以某种方式解决这个问题吗? - 有没有更简单的方法来做到这一点?
完整的游乐场代码
c++ - 我们可以获取子字符串的 const ref 吗?
我有一个类,其中包含一个字符串作为私有成员。该类具有公共成员函数,它们都将 const ref 返回到 std::wstring。
返回的所有 const-ref 字符串都是私有成员的子字符串。
我可以将每个子字符串存储为成员,然后将 const refs 返回给这些成员,但这不是最佳的,因为它会复制内存。
假设我确实存储了足够的内存来知道每个子字符串的开始和结束索引。
如何在不复制任何成员字符串的情况下实现上述类?
java - 静态工厂方法而不是构造函数
在阅读 Joshua Block 的 Effective Java Book 第 1 项关于使用工厂静态方法而不是构造函数后,我一直在研究这个问题。在文本中,他尽可能为使用进行辩护,并在其他理由中引用了实施Singleton或Flyweight标准的可能性。它还引用了该类的案例,该类通过方法Boolean
明智地使用了享valueOf (boolean)
元:
我的问题是:我了解使用这些模式的优点,但无法在构造函数本身中实现?单独使用它们并不能证明创建静态工厂方法是合理的。
java - 在 Java 中同时使用线程和享元模式?
我对多线程和使用设计模式都是新手。
我有一些线程使用显式多线程,如果任何线程都没有计算过某个数字的阶乘,那么每个线程都应该计算它。我为此使用享元模式。
如果我这样做,那么说我的线程 Th 是计算阶乘是否正确?
如果我在 Fact (Flyweight) 类中添加计算,那么它是否仍然是 Flyweight,我想是的。
任何其他做我想做的事情的方式也将受到高度赞赏。
design-patterns - Flyweight 设计模式是否适用于降低实例化成本?
设计模式书为享元设计模式(粗体强调我的)提供了以下适用性:
适用性
Flyweight 模式的有效性在很大程度上取决于它的使用方式和位置。当满足以下所有条件时应用享元模式:
- 应用程序使用大量对象。
- 由于对象数量庞大,存储成本很高。
- 大多数对象状态都可以是外部的。
- 一旦外部状态被移除,许多对象组可能会被相对较少的共享对象所取代。
- 应用程序不依赖于对象身份。由于享元对象可能是共享的,身份测试将为概念上不同的对象返回 true。
除了存储成本(空间资源)之外,实例化成本(时间资源)是否也有助于一个有效的应用程序?
java - 以对象参数为关键的享元设计模式?
我正在尝试使用 Flyweight 设计模式减少 Book 对象的重复,但在某些时候卡住了。
例如,假设有一个 book 类,其中包含一些变量,例如 bookName、published_date 和 Langauge,并且有人创建了一个 book 实例:
我想要做的是,当他克隆上面的同一本书实例时,我想减少重复。
但是,当我搜索享元模式时,它们都将 String 或 Integer 作为内在值/键。
例子:
上面的代码将 String flavorName 作为内在值。
我想问的是,有没有办法将 Book 对象作为内在价值并使用享元模式?
提前致谢!