问题标签 [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 回答
1738 浏览

c# - 如何避免创建多个对象实例?

员工的工资由两个要素计算得出 -BasicStandardPoint。一名员工每月将获得一个基本积分和一个或多个(或没有)标准积分。

有各种 StandardPoints,即 StarPerformerPoint、RecognitionPoint、ReferralPoint、BrandingPoint。

有计算 TotalAnnualSalary 的功能。一年内,一名员工最多可获得 4 个标准积分。即使他得到更多的分数,也只会计算 4 来计算年薪总额。

我有以下代码。它工作正常。但是,内存利用率不高。StandardPointElement 被创建多次。

在这种情况下,我们如何优化对象创建?

更新

我们可以使用享元模式之类的东西吗?

维基百科说关于享元模式

享元是一种通过与其他类似对象共享尽可能多的数据来最小化内存使用的对象;当简单的重复表示将使用不可接受的内存量时,这是一种使用大量对象的方法。

在文章Flyweight Design Pattern - C#中,Shailendra Chauhan 提到了以下内容

外部数据是在运行时动态计算的,它保存在享元对象之外。因此它可以是有状态的。

为什么享元模式实用?

代码

员工类

工厂

客户

0 投票
4 回答
5188 浏览

c# - 理解享元模式

意图:

这种模式的目的是使用共享来支持大量对象,这些对象的内部状态的一部分是相同的,而另一部分的状态可能会有所不同。

对象可以通过静态字段共享状态。

使用享元模式和使用静态字段共享大量对象的内部状态有什么区别?

享元通过其工厂提供的对象池是享元的真正意义所在吗?

0 投票
1 回答
1617 浏览

java - Java享元模式:外部和内部状态?

我对模式的这些状态的差异感到困惑Flyweight

我知道intrinsic状态是共享的状态,而Extrinsic不是共享的状态。

但是,我看不到extrinsic状态在模式或以下示例中的重要性:

参考维基百科中关于文本编辑器的示例。内在状态是字母,外在状态是字体、颜色等吗?

0 投票
1 回答
808 浏览

design-patterns - 多吨模式与享元模式

我看不出MultitonFlyweight模式之间有任何单一的区别。请解释一下有什么区别?

0 投票
2 回答
275 浏览

design-patterns - 蝇量级模式

谁能解释 Flyweight 模式的以下代码如何工作:

谢谢。

0 投票
1 回答
209 浏览

c++ - flyweigt模式和并发

在享元设计模式的情况下,如何确保线程安全。有哪些并发问题需要关注,这些问题有没有标准的解决方案。我正在寻找有关 c++ 的解决方案

我在享元创建期间尝试了正常的线程互斥方法。我想知道是否还有其他我遗漏的问题。我还应该防止蝇量级复制。另一个问题是维基百科中提到的允许并发线程创建多个享元实例,从而消除争用并允许每个值多个实例。- 这样做是个好习惯吗

0 投票
1 回答
361 浏览

design-patterns - 如何同时使用装饰器和享元设计模式?

在什么情况下最好将设计模式Decorator和Flyweight结合使用。

我要建立一个金融系统,一些朋友向我展示了这些标准。

0 投票
3 回答
2557 浏览

java - Flyweight设计模式和Java缓存有什么区别

我阅读了享元设计模式并了解到它存储可以共享的对象以节省堆使用量。Java缓存还保存了以后可以重用的对象,以节省内存。那么享元设计模式和 java 缓存之间的真正区别是什么?

0 投票
1 回答
251 浏览

java - 享元设计模式中如何多次返回同一个对象

我有一个示例,它演示了轻量级设计模式,游戏中有士兵。这个士兵实例必须同时被多个客户端使用。这个链接说如果它在地图(或缓存)中可用,则返回相同的对象。并发使用同一个对象不是不安全的,因为线程可能会改变它的属性。

0 投票
1 回答
206 浏览

c++ - boost::flyweight 不适用于课堂

首先我使用享元作为字符串,它工作正常,但是当我使用享元作为结构时。它不起作用。字符串的第一个测试用例是:

然后我定义了一个结构A,A中的一些属性我使用了flyweight。testcase2如下:

但无论我是否在A中使用flyweight,它对使用的内存都没有任何变化。