问题标签 [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 投票
3 回答
2245 浏览

design-patterns - 建造者模式和享元模式有什么区别?

构建器模式和享元模式在使用方面有什么区别,因为它们都处理大量对象?

0 投票
4 回答
1487 浏览

java - 休眠和享元

有没有办法将享元对象与休眠持久性映射一起使用?我的数据模型包含许多相同的对象。我不想为每个相同的对象使用单独的实例,而是使用享元设计模式并始终引用相同的物理对象。如何在休眠中实现这一点?

顺便提一句。是否所有 JVM 都以某种方式优化字符串的使用,即当多次使用相同的字符串时,它总是相同的物理实例?

0 投票
3 回答
1314 浏览

database - 在数据库驱动的应用程序中使用享元模式

谁能给我任何我应该使用享元模式的数据库驱动应用程序中的情况示例?

我怎么知道,我应该在我的应用程序的某个点使用享元模式?

我学会了蝇量级模式。但无法理解在我的数据库驱动业务应用程序中的合适位置使用它。

0 投票
1 回答
1623 浏览

php - 如何在 php 中实现享元模式?

这是它的定义:

使用共享有效地支持大量细粒度对象。

但我无法弄清楚它的确切含义。

你能用一个小演示详细说明吗?

0 投票
3 回答
824 浏览

c# - IDisposable 的享元和工厂问题

我似乎在精神上陷入了享元模式的困境。

首先,假设我有一个一次性类型DisposableFiddle和一个工厂FiddleFactory

然后,在我看来,客户很清楚FiddleFactory工厂声称对创建的小提琴没有所有权,并且客户有责任在处理完小提琴后处理它。

但是,假设我想通过使用享元模式在客户端之间共享小提琴:

然后我觉得在道德上有义务让工厂本身是一次性的,因为它创造了小提琴并在他们的一生中保持对它们的引用。但这会给假设他们拥有小提琴并因此应该处置它们的客户带来问题。

问题实际上是我调用工厂FiddleFactory而不是,说,FiddlePool和“创建”方法CreateFiddle而不是GetFiddle?像这样:

然后,客户就更清楚它不会拥有返回的小提琴,并且处理小提琴是池的责任。

还是只能通过文档轻松解决?

有没有办法摆脱困境?甚至有两难境地吗?:-)

0 投票
7 回答
11513 浏览

java - java如何在引擎盖下为字符串实现享元模式?

如果您有两个 String 实例,并且它们是相等的,那么在 Java 中它们将共享相同的内存。这是如何在幕后实现的?

编辑:我的应用程序使用大量 String 对象,其中许多是相同的。使用 Java String 常量池的最佳方法是什么,以避免创建自定义享元实现?

0 投票
5 回答
7459 浏览

java - Java中String flyweight实现的最佳替代方案

我的应用程序是多线程的,具有密集的字符串处理。我们正在经历过多的内存消耗,并且分析表明这是由于字符串数据造成的。我认为内存消耗将从使用某种享元模式实现甚至缓存中受益匪浅(我确信字符串经常被重复,尽管我在这方面没有任何硬数据)。

我看过 Java Constant Pool 和 String.intern,但似乎它会引发一些 PermGen 问题。

在java中实现应用程序范围的多线程字符串池的最佳选择是什么?

编辑:另请参阅我之前的相关问题:Java 如何在后台为字符串实现享元模式?

0 投票
1 回答
1529 浏览

c++ - 享元模式和 C++ 模板

我有轻量级模式。我有抽象类字形。我有从字形派生的字母类和抽象代码。我有从 Code 派生的 YusciiCode、UniCyrCode 和 UniLatCode。

我的轻量级工厂可以这样完成:

可以这样做:

在第一个示例中,GCC 链接器告诉我没有 Letter(unsigned int) 和 xxxCode(string) 构造函数。实际上没有,而且 GCC 是正确的,但是有没有比定义那些构造函数更好的方法呢?

在seccond ecample GCC编译器告诉我有错误就行了

GetFlyweight 函数。

实现这种享元模式的方法是什么?

我需要使用它。这是我当前的实现:

0 投票
1 回答
198 浏览

java - dom4j 库如何实现享元模式?

我可以在 dom4j 库中看到一些带有 Flyweight 前缀的类:FlyweightAttribute、FlyweightComment、FlyweightText 等。这是 java doc 在 FlyweightText 的情况下所说的:

FlyweightText 是单链接的只读 XML 文本的 Flyweight 模式实现。尽管该节点不支持父关系,但它可以跨文档和元素共享。

但是,我似乎无法在代码实例池中找到这些实例在文档之间共享的位置。

库中是否完全实现了此功能?如果是,实现它的代码在哪里?

0 投票
3 回答
1409 浏览

design-patterns - Flyweight 设计模式命名的原因是什么?

我不是一个以英语为母语的人,并且试图更好地理解该设计模式,我对用于命名模式的那个词的起源感兴趣。取这个名字的动机是什么?

据我所知,享元设计模式关注的是一种使用共享来支持大量细粒度对象的方法。

但是,我为该特定词(蝇量级)找到的定义是指重量小于 112 磅的拳击类别。

那么,为什么要以这种方式调用模式呢?

对不起,如果这看起来很愚蠢,但我真的不知道。