任何人都可以给我一些数据库驱动应用程序中应该使用享元模式的情况示例吗?

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

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

有帮助吗?

解决方案

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

其他提示

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

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

Colors 基础类库中的画笔作为示例浮现在脑海中

由于Flyweight的一个非常重要的部分是共享实现是不可变的,因此数据驱动的应用程序中的优秀候选者将是域驱动设计指的是值对象 - 但只有在您拥有大量相同值时它才会变得相关。

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

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

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

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

[请参阅这篇维基百科文章].

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top