Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flyweight设计模式和Java缓存之间的区别是什么_Java_Caching_Design Patterns_Flyweight Pattern - Fatal编程技术网

Flyweight设计模式和Java缓存之间的区别是什么

Flyweight设计模式和Java缓存之间的区别是什么,java,caching,design-patterns,flyweight-pattern,Java,Caching,Design Patterns,Flyweight Pattern,我阅读了Flyweight设计模式,了解到它存储了可以共享的对象,从而节省了堆上的使用。Java缓存还保存了以后可以重用的对象,以节省内存。那么Flyweight设计模式和java缓存之间的真正区别是什么 Flyweight设计通常是存储不变的对象 “Java缓存”不是一个定义良好的术语。它可能意味着许多事情,例如结果缓存或资源对象池。Flyweight模式是一种结构设计模式,它会影响对象的结构设计。本文的重点是 设计模式是可共享和不可共享状态。可共享状态存储在Flyweight对象中(因为它与

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

Flyweight设计通常是存储不变的对象


“Java缓存”不是一个定义良好的术语。它可能意味着许多事情,例如结果缓存或资源对象池。

Flyweight模式是一种结构设计模式,它会影响对象的结构设计。本文的重点是 设计模式是可共享和不可共享状态。可共享状态存储在Flyweight对象中(因为它与上下文无关)。 也可能存在不可共享的外部状态,指定该状态的负担落在客户机上,因为该状态是特定于上下文的

现在您可以使用缓存来实现Flyweight模式,但缓存通常与Flyweight模式本身无关。缓存的概念有更大的背景,因为它有利于通过重用节省计算资源(CPU/内存/网络)。

假设“Java缓存”是一个对象池(或对象池模式)

我认为区别在于对缓存对象是否为单例的理解

在flyweight模式中,使用可能由多个客户端从“工厂”获取的相同的对象。这需要不同的管理方式(如并发性、与客户机相关的工作等)。例如,如果在多个UI客户端/视口中同时获取可见的同一flyweight对象(例如按钮),则最终操作同一对象(例如按钮文本),这可能会在这些不同的UI/视口上造成不一致。这不会发生,因为每次您请求对象时,池/缓存都会返回一个单独的对象


关于不可变,我在web上遇到了几个例子,其中包括flyweight对象中的外部/更改状态。嗯,我不认为将其作为flyweight对象的一部分完全错误,因为关键是减少内存占用,只要您能够正确管理对象。但我也认为这是完全可以讨论的。

谢谢谢伦德拉的回答。你能给我一个不使用缓存的好例子吗