Java的字符串内存池的实现是否遵循flyweight模式?
为什么我有这样的疑问,我看到实习生中没有外在的状态。在GoF中,我读到在内在状态和外在状态之间应该有一个正确的平衡。但在实习生中,一切都是内在的。
或者我们应该说,对于属性没有严格的规则,仅仅共享对象以减少内存就足以称之为flyweight。
请帮我理解一下。
发布于 2015-12-07 22:37:29
您已经正确地认识到Interning和Flyweight都基于相同的想法:缓存和共享公共状态。
对于Flyweight,在没有外部状态可存储的极端情况下,只保留指向内部状态的指针。那么外部状态甚至不需要是对象,指针本身也可以是外部状态。那是Flyweight成为实习生的时候。
实习生“真正”是否是Flyweight的一种,只是关于定义的争论。最重要的是理解如何将一个实例视为另一个实例的特定实例,因此您是优秀的。
发布于 2015-12-27 01:54:51
正如其他人所说,String.intern()就是关于缓存的。它返回对池中已存储的字符串文字的引用。以这种方式,它在某种程度上类似于flyweight模式,因为它使用了现有的对象,从而降低了内存消耗并提高了性能(尽管intern在字符串池中也有自己的查找性能开销)。因此,这两个可能看起来很相似,但实际上并非如此。
发布于 2012-11-20 07:47:16
Flyweight是关于共享对象immmutable内部结构的。Interning就是缓存整个对象。
https://stackoverflow.com/questions/11189155
复制相似问题