如何实现具有可覆盖属性的flyweight模式?

时间:2015-12-16 21:23:30

标签: design-patterns

我想实现一个在树的多个节点之间共享的组件系统。 我想象Flyweight模式非常适合这种用途。 该组件仅实例化一次,并且该实例被提供给需要它的每个节点。 这样,如果组件的属性发生更改,则会立即将其共享给节点。

现在,我想在节点上只更改组件的一个参数而不影响其他节点。 但我不想复制组件的实例来做到这一点。

  • 如果在组件级别更改属性,则新值将与节点共享,除非在节点上显式更改了此属性。
  • 如果在节点级别更改属性,它将覆盖组件中的属性。

我想要创建的是一种类似于Unity中场景树的机制,我们可以在节点级覆盖组件的某些属性(例如,当我们使用预制件时),而不会影响原始资源,除非我们明确要求。

现在,我不知道如何制作具有某种可覆盖属性的轻量级模式。

你能帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:2)

由于Flyweight(您清楚地了解)使用共享对象,因此您无法修改这些对象而不会影响指向该flyweight的所有内容。解决这个问题的方法是使用合成。也就是说,当你想创建一个'覆盖'您创建一个包装flyweight的新对象并应用新行为。我的GoF模式有点生疏,但我认为这实际上是应用于Flyweights的Decorator模式。