0

我了解享元设计模式的好处,但我不确定它的确切缺点。例如,我知道它可能是破坏封装,但这就是我目前所能想到的,flyweight 设计模式有哪些可能的缺点,关于这件事的文档很少。

4

1 回答 1

0

在第 199 页,GoF 提到,

享元可能会引入与传输、查找和/或计算外在状态相关的运行时成本,特别是如果它以前存储为内在状态。

如果计算或查询外部状态而不是存储外部状态,则享元可以是空间与时间的权衡。当然,模式本身也增加了一些固有的复杂性:以前由每个对象拥有并直接访问的数据现在必须通过某种类型的工厂检索,这增加了一个额外的间接层。

Flyweight模式的狭窄适用性也可以被认为是一个缺点。根据 GoF,必须满足五个不同的条件才能利用该模式的优势。这就是我认为JavaString.intern()不是 Flyweight的原因。

于 2020-05-30T21:27:06.523 回答