我们知道,Java实习生字符串池基于Flyweight设计模式。 而且String对象是不可变的。是否所有使用“飞行重量”模式的对象都是不可变的? 。 Flyweight模式中的可变对象和不可变对象有什么区别?
答案 0 :(得分:2)
所有使用Flyweight模式的对象都是强制性的
您可以实现看起来像轻量级的东西,但是您的对象很可能是可变的。我认为这是一个糟糕的实现。
重新查看评论。不变状态here。
仅凭轻量级模式的使用性质,不可变性当然是理想的。您的客户可能不知道他们请求/创建的对象实际上是与其他组件或线程共享的,在这种情况下拥有可变对象很可能会带来问题。
答案 1 :(得分:0)
请记住,GoF设计模式是从1980年代左右编写的代码中收集的。如今,可变性已不再是问题。考虑到这一点,它们的所有模式都支持可变状态。 GoF书中有关可变性的单个注释是删除复合叶节点的通行参考。我会将本书中的所有其他对象引用都解释为潜在可变的。
这并不意味着可变性是可取的,或者模式不能不变。实际上,出于所有其他相同的原因,不变性是要应用于设计模式的一项重要功能。但这在GoF中从来不是强制性的。