2

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

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

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

4

3 回答 3

3

除了非常专业的数据库应用程序外,享元可能会被您的应用程序使用,但可能不适用于表示持久存在于数据库中的实体的任何类。当可能需要一个类的如此多的实例化时使用享元,如果你在需要的每个离散时间实例化一个,它的性能就会受到影响。因此,您只需要更改每次使用的数据值,就可以实例化数量少得多的它们,并为每个需要的实例重用它们。这在以下情况下很有用,例如,您可能必须每秒实例化数千个此类类,而持久化在数据库中的实体通常不是这种情况。

于 2009-11-30T08:22:15.530 回答
2

当任何模式自然地表明它可以解决具体问题时,你应该应用它——而不是在你的应用程序中寻找可以应用给定模式的地方。

Flyweight 的目的是解决内存问题,因此只有在您分析应用程序并确定您有大量相同的实例之后应用它才有意义。

来自基类库的颜色画笔作为示例浮现在脑海中。

由于享元的一个非常重要的部分是共享实现是不可变的,因此数据驱动应用程序中的良好候选者将是域驱动设计所指的值对象——但只有当你有很多相同的值时它才会变得相关。

于 2009-11-30T08:15:29.643 回答
1

[不是数据库专家,所以这是我最好的猜测]

享元模式的真正好处是您可以在需要时重用数据;另一个例子是文字处理,理想情况下,您的文档中的每个“字符”都有一个对象,但这会占用太多内存,因此享元内存只允许您存储所需的每个唯一值中的一个。

第二种(也许是最简单的)看待它的方法就像对象池,只是你在“每个字段”级别而不是“每个对象”级别上进行池化。

事实上,现在我想起来了,这与在 c(++) 中使用(相对较小的)内存块没有什么不同,因此存储一些原始数据,您可以通过指针操作将其取出。

[见这篇维基百科文章]。

于 2009-11-30T08:12:59.870 回答