Java Flyweight图案对象是不可变的吗?
我们知道,Java intern字符串池是基于Flyweight设计模式的。 字符串对象也是不可变的。是否强制所有使用Flyweight模式的对象都是不可变的。Flyweight模式中可变对象和不可变对象之间的区别是什么?是否强制所有使用Flyweight模式的对象都是不可变的 你可以实现一些看起来像飞锤的东西,但是你的对象很可能是可变的。我认为这是一个糟糕的执行 请参阅评论。不变状态Java Flyweight图案对象是不可变的吗?,java,design-patterns,immutability,flyweight-pattern,Java,Design Patterns,Immutability,Flyweight Pattern,我们知道,Java intern字符串池是基于Flyweight设计模式的。 字符串对象也是不可变的。是否强制所有使用Flyweight模式的对象都是不可变的。Flyweight模式中可变对象和不可变对象之间的区别是什么?是否强制所有使用Flyweight模式的对象都是不可变的 你可以实现一些看起来像飞锤的东西,但是你的对象很可能是可变的。我认为这是一个糟糕的执行 请参阅评论。不变状态 不变性当然是可取的,仅仅是因为flyweight模式的使用性质。您的客户机可能不知道他们请求/创建的对象实际上
不变性当然是可取的,仅仅是因为flyweight模式的使用性质。您的客户机可能不知道他们请求/创建的对象实际上是与其他组件或线程共享的,在这种情况下拥有可变对象可能会有问题 记住,GoF设计模式是从20世纪80年代左右编写的代码中收集的。易变性不是今天的问题。考虑到这一点,它们的所有模式都支持可变状态。GoF书中关于可变性的一个注释是删除复合叶节点的间接参考。我会将书中的所有其他对象引用解释为可能是可变的
这并不意味着可变性是可取的,或者模式不可能是不变的。事实上,不变性是应用于设计模式中的一个重要特性,其原因与其他地方的不变性相同。但它在GoF中从来都不是强制性的。因为对象可能在线程之间共享。所以,为了避免任何并发修改,您必须具有不可变对象。也许还有其他原因,但这是我能想到的主要原因。我认为Java的字符串池是基于Flyweight模式的。